1

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

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

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


    }
}
4

3 回答 3

2

我在使用 Eclipse 4.4 的 Mavericks 上遇到了完全相同的问题,但我意识到当我将 swt 应用程序放在后台并将其再次带到前面时,我可以看到菜单栏。不过,似乎是某种错误。

于 2014-07-12T18:55:01.603 回答
1

我在使用 IntelliJ 时遇到了同样的问题,当我从命令行运行时,我发现显示应用程序菜单的唯一方法是创建一个 .app 目录(http://www.eclipse.org/swt/macosx/)和双击或使用打开命令执行它。

于 2013-12-16T18:08:22.390 回答
0

还是有问题。但是,如果您在启动 SWT 应用程序后打开任何其他应用程序的窗口,然后切换回来,则可以使用。从您的 SWT 应用程序以编程方式执行此操作的一个技巧是在获取您的 Display 实例后打开一个 Finder 窗口:

Display display = Display.getDefault();
try { 
     Runtime.getRuntime().exec("open .");
} catch (Exception e) { }
于 2020-11-30T02:59:08.393 回答