在Mac OS X上,菜单不会显示SWT

时间:2013-11-06 03:05:17

标签: java macos swt

出于某种原因,当我在OS X上运行我的简单SWT应用程序时,菜单根本不显示。这个问题不会发生在我编写的其他SWT应用程序中,我不知道是什么我的做法与众不同。当我运行我的程序时,我在屏幕顶部看到的菜单属于Eclipse,它恰好是我正在使用的IDE。此外,虽然Eclipse菜单可见,但它无法以任何方式点击或响应。

这是菜单现在的样子(以避免混淆我的意思):

Eclipse's menu

以下是相关代码:

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


    }
}

3 个答案:

答案 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();
} });