2017-12-04 10 views
0

SWTオブジェクト "メニュー"を使用してメニューを作成しようとしています。コードの ラインはかなり単純です:Java SWT例外: "java.lang.IllegalArgumentException":メニューがPOP_UPではありません

Exception in thread "main" java.lang.IllegalArgumentException: Menu is not a POP_UP 
at org.eclipse.swt.SWT.error(Unknown Source) 
at org.eclipse.swt.SWT.error(Unknown Source) 
at org.eclipse.swt.SWT.error(Unknown Source) 
at org.eclipse.swt.widgets.Widget.error(Unknown Source) 
at org.eclipse.swt.widgets.Control.setMenu(Unknown Source) 
at labo.Laboratory.createShell(Laboratory.java:25) 
at labo.Laboratory.main(Laboratory.java:15) 

関与しているようだSWTコードが「setMenu」方法からいずれかです。

public static void main(String[] args) { 

    createShell(); 
} 


private static void createShell() { 

    Display display = new Display(); 
    Shell shell = new Shell(display, SWT.SHELL_TRIM); 

    Menu menu = new Menu(shell, SWT.BAR); 
    shell.setMenu(menu); 

    shell.open(); 

    while (! shell.isDisposed()) { 
     if (!display.readAndDispatch()) { 
      display.sleep(); 
     } 
    } 

    display.dispose(); 

} 

は、実行時に、私は次の例外を取得します:

public void setMenu (Menu menu) { 
checkWidget(); 
if (menu != null) { 
    if (menu.isDisposed()) error(SWT.ERROR_INVALID_ARGUMENT); 
    if ((menu.style & SWT.POP_UP) == 0) { 
     error (SWT.ERROR_MENU_NOT_POP_UP); 
    } 
    if (menu.parent != menuShell()) { 
     error (SWT.ERROR_INVALID_PARENT); 
    } 
} 
this.menu = menu; 

}

Obvisously私はCの次の行に移動ode:

if ((menu.style & SWT.POP_UP) == 0) { 
    error (SWT.ERROR_MENU_NOT_POP_UP); 
} 

しかし、なぜ私は理解できません。私が実行しようとしているコードは、どこでも有効な例として与えられていますが、私にとってはうまくいきません。

私はeclipse IDEとJava 8 JREを使用しています。 SWTライブラリはeclipseネオンが提供するライブラリです。私が使用しているOSはWindows 7です。

このエラーは他のコンピュータや設定で再現しましたが、奇妙なことに他の誰もそれに直面していないようです。

答えて

1

setMenuメソッドは、任意のコントロールのポップアップメニューを設定します。こののメニュースタイルは、SWT.POP_UPである必要があります。

ShellsetMenuBarメソッドは、ウィンドウの上部にあるメニューバー(macOSの画面の一番上)に設定されています。これにはメニュースタイルがSWT.BARである必要があります。

+0

それです。私はsetMenuBarの代わりにsetMenuメソッドを選んだ。 – burgerLove

+0

それは私の非常にばかげたミスでした。ご協力いただき誠にありがとうございます :-) – burgerLove

関連する問題