Java SWT 异常:"java.lang.IllegalArgumentException":菜单不是 POP_UP

Java SWT exception : "java.lang.IllegalArgumentException" : Menu is not a POP_UP

我尝试使用 SWT 对象创建一个菜单 "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();

}

在运行时,我得到以下异常:

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代码是[​​=34=]方法中的那个:

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;

}

显然我转到了以下代码行:

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

但我不明白为什么。我尝试执行的代码在任何地方都作为有效示例给出,但它对我不起作用。

我正在使用带有 Java 8 JRE 的 eclipse IDE。 SWT库是eclipse neon提供的库。我使用的 OS 是 Windows 7.

我已经用其他计算机和配置重现了这个错误,但奇怪的是似乎没有其他人面对它。

setMenu 方法为任何控件设置弹出菜单。此的菜单样式必须SWT.POP_UP

您可能正在寻找 ShellsetMenuBar 方法,该方法设置为 window 顶部的菜单栏(macOS 屏幕顶部)。这就要求菜单样式为SWT.BAR.