出于某种原因,当我在OS X上运行我的简单SWT应用程序时,菜单根本不显示。这个问题不会发生在我编写的其他SWT应用程序中,我不知道是什么我的做法与众不同。当我运行我的程序时,我在屏幕顶部看到的菜单属于Eclipse,它恰好是我正在使用的IDE。此外,虽然Eclipse菜单可见,但它无法以任何方式点击或响应。
这是菜单现在的样子(以避免混淆我的意思):
以下是相关代码:
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MenuItem;
import org.eclipse.swt.layout.FormLayout;
import org.eclipse.swt.widgets.ToolBar;
import org.eclipse.swt.layout.FormData;
import org.eclipse.swt.layout.FormAttachment;
import org.eclipse.swt.widgets.ToolItem;
import org.eclipse.wb.swt.SWTResourceManager;
public class AnalyzerApp {
protected Shell shell;
Display display;
boolean thisIsAMac = SWT.getPlatform().equals("cocoa");
public static void main(String[] args) {
try {
AnalyzerApp window = new AnalyzerApp();
window.open();
} catch (Exception e) {
e.printStackTrace();
}
}
public void open() {
Display.setAppName("Analyzer");
display = Display.getDefault();
createContents();
shell.open();
shell.layout();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
}
protected void createContents() {
shell = new Shell();
shell.setSize(832, 526);
shell.setText("Analyzer");
shell.setLayout(new FormLayout());
// Menu
Menu menu = new Menu(shell, SWT.BAR);
shell.setMenuBar(menu);
if(thisIsAMac) menu = display.getMenuBar();
// ^ tried to fix with this, didn't change anything
MenuItem mntmFile = new MenuItem(menu, SWT.CASCADE);
mntmFile.setText("File");
Menu fileMenu = new Menu(mntmFile);
mntmFile.setMenu(fileMenu);
MenuItem mntmNew = new MenuItem(fileMenu, SWT.NONE);
mntmNew.setText("New");
MenuItem mntmOpen = new MenuItem(fileMenu, SWT.NONE);
mntmOpen.setText("Open");
MenuItem mntmSave = new MenuItem(fileMenu, SWT.NONE);
mntmSave.setText("Save");
MenuItem mntmSaveAs = new MenuItem(fileMenu, SWT.NONE);
mntmSaveAs.setText("Save As");
new MenuItem(fileMenu, SWT.SEPARATOR);
MenuItem mntmImport = new MenuItem(fileMenu, SWT.NONE);
mntmImport.setText("Import");
}
}
答案 0 :(得分:1)
我使用IntelliJ时遇到同样的问题,当我从命令行运行时,我发现显示应用程序菜单的唯一方法是创建.app目录(http://www.eclipse.org/swt/macosx/)并通过双击或执行它使用open命令。
答案 1 :(得分:0)
我在使用Eclipse 4.4的小牛队中遇到了完全相同的问题,但我意识到我可以看到菜单栏,但是在后台使用swt应用程序并将其再次放到前面。 不过,似乎是某种错误。
答案 2 :(得分:0)
还是个问题。但是,只要在打开SWT应用程序后打开任何其他应用程序的窗口,然后再切换回去,就可以使用。通过SWT应用程序以编程方式执行此操作的一种方法是:
try { Runtime.getRuntime().exec("open ."); }
catch (Exception e) { }
shell.getDisplay().asyncExec(new Runnable() {
public void run() {
try { Thread.currentThread().sleep(1000); }
catch (Exception e) { }
shell.forceActive();
} });