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
。
您可能正在寻找 Shell
的 setMenuBar
方法,该方法设置为 window 顶部的菜单栏(macOS 屏幕顶部)。这就要求菜单样式为SWT.BAR
.
我尝试使用 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
。
您可能正在寻找 Shell
的 setMenuBar
方法,该方法设置为 window 顶部的菜单栏(macOS 屏幕顶部)。这就要求菜单样式为SWT.BAR
.