2017-12-04 26 views
0

SWT 객체 "메뉴"를 사용하여 메뉴를 만들려고합니다. 코드의 라인은 오히려 간단하다 :자바 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 코드는 "면 SET MENU"방법의 하나입니다

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); 
} 

하지만 이유를 이해할 수 없습니다. 실행하려고 시도하는 코드는 어디에서나 유효한 예제로 제공되지만 나에게는 적합하지 않습니다.

Java EE IDE와 Java 8 JRE를 사용하고 있습니다. SWT 라이브러리는 eclipse 네온에서 제공하는 라이브러리입니다. 내가 사용하는 OS는 Windows 7입니다.

다른 컴퓨터 및 구성에서이 오류를 재연했지만 흥미롭게도 다른 사람이 직면 한 것 같지 않습니다.

답변

1

setMenu 메서드는 모든 컨트롤에 대한 팝업 메뉴를 설정합니다. 이 의 메뉴 스타일은SWT.POP_UP이어야합니다.

ShellsetMenuBar 방법을 찾고 있는데,이 방법은 창 상단 (MacOS의 화면 상단)에 메뉴 모음으로 설정되어 있습니다. 메뉴 스타일은 SWT.BAR이어야합니다.

+0

그게 전부입니다. setMenuBar 대신 setMenu 메서드를 선택했습니다. – burgerLove

+0

그것은 내 바보 같은 실수였습니다. 많은 도움을 주셔서 감사합니다. :-) – burgerLove