OSX系统菜单栏不能在JavaFX中工作

时间:2017-02-10 10:43:43

标签: java java-8 javafx-8 nsmenu

我尝试使用https://github.com/codecentric/NSMenuFX中的NSMenuFX来使JavaFX应用程序使用MacOS系统菜单栏,但由于此方法始终返回false,因此无效。

Toolkit.getToolkit().getSystemMenu().isSupported()

该方法来自包:com.sun.javafx.tk.Toolkit

深入研究代码我发现Toolkit.getToolkit().getSystemMenu().isSupported()调用了来自com.sun.glass.ui.Application的方法,该方法也始终返回false。

protected boolean _supportsSystemMenu() {
    return false;
}

public final boolean supportsSystemMenu() {
    checkEventThread();
    return this._supportsSystemMenu();
}

这段代码有什么问题,我怎样才能使用系统菜单栏获取JavaFX应用程序。

注意:在OSX 10.12.3上使用的JDK是8u121。

编辑1:正如评论中所建议的,这里有一些代码。

import javafx.scene.control.MenuBar;

public class MyappMenuBar extends MenuBar {
// member variables -------------------------------------------------------------------------
    private final MyappPane mmyappPane;
    public MyappPane getMyappPane() {return mMyappPane;}
    private final MyappHelpMenu mHelpMenu;
    public MyappHelpMenu getHelpMenu() {return mHelpMenu;}

// constructors -----------------------------------------------------------------------------
    public myappMenuBar(MyappPane pMyappPane) {
        mMyappPane = pMyappPane;
        setUseSystemMenuBar(true);
        mHelpMenu = new MyappHelpMenu(pMyappPane);
        getMenus().add(mHelpMenu);
    }
}

1 个答案:

答案 0 :(得分:1)

问题是由启动画面(java -splash:../ img.png)引起的,因为它是一个AWT功能而不是JavaFX功能,似乎没有任何东西可以帮助组合{{1}和JavaFX线程在一个线程中并且AWT似乎不起作用。

现在我只是禁用了启动画面,我计划在应用程序中将其作为JavaFX Pane实现。