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

标签 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);
    }
}

最佳答案

问题是由启动屏幕 (java -splash:../img.png) 引起的,因为它是 AWT 功能而不是 JavaFX 功能,似乎没有什么可以帮助结合 AWT 和 JavaFX 线程一起在一个线程中,并且 -Djavafx.embed.singleThread=true 似乎不起作用。

目前,我刚刚禁用了启动屏幕,我计划将其从应用程序内实现为 JavaFX Pane 。

关于java - OSX 系统菜单栏在 JavaFX 中不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42157377/

相关文章:

java - 使用 JDK 11+ 运行 JavaFX 应用程序

JavaFX 应用程序出现在 Windows 任务管理器中的 javaw.exe 下。我怎样才能让它显示为一个独立的应用程序

鼠标/拖动事件上的 JavaFX 飞盘运动

java - Java中对 float 进行运算时使用哪种舍入方法?

java - hashCode 和聚合

java - 使用 DefaultListModel 从 ArrayList 添加项目到 JList

java - 如何使用 java 8 流式传输 String 和 Map 的 Map?

java - WAGU( TableView 中的数据)库中的修改

java - 从单个列表并行输入 map 和列表

java - 如何在java.time.Instant中获取和设置指定时间?