OSX 系统菜单栏在 JavaFX 中不起作用
Posted
技术标签:
【中文标题】OSX 系统菜单栏在 JavaFX 中不起作用【英文标题】:OSX System menubar not working in JavaFX 【发布时间】:2017-06-28 16:23:51 【问题描述】:我试图使用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 :按照 cmets 的建议,这里有一些代码。
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);
【问题讨论】:
有理由使用外部库吗?使用常规 JavaFXMenuBar
和调用 setUseSystemMenuBar(true)
不起作用吗?
@James_D 实际上没有,“setUseSystemMenuBar(true)”没有效果。
它对我来说很好用。如果它不起作用,你可能做错了什么......发布一些代码。
我查看了您链接的库。它在所有地方都使用非公共 API 类,因此对于不同的 JDK 版本等,它不能是健壮的。这可能是它失败的原因(尽管也可能有其他原因)。我只会使用标准的 API 方式来实现这一点。
感谢@James_D,我添加了 MyAppMenuBar 类代码,我使用该类来构造 menuBar,然后实例化它并稍后使用。
【参考方案1】:
问题是由闪屏引起的 (java -splash:../img.png),因为它是 AWT 功能而不是 JavaFX
功能,似乎没有什么可以帮助结合 AWT
和 JavaFX 线程一起在一个线程中,-Djavafx.embed.singleThread=true
似乎不起作用。
目前我只是禁用了启动画面,并计划在应用程序中将其实现为 JavaFX 窗格。
【讨论】:
似乎系统菜单栏在 Javafx 版本:8.0.241-b07,运行时版本:1.8.0_251-b08 在 OSX 10.15.6 中确实不起作用。鼠标点击菜单栏无反应。以上是关于OSX 系统菜单栏在 JavaFX 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章
bootstrap 4导航栏在rails 5应用程序中不起作用
搜索栏在 swift 3 中不起作用。无法将类型 (_) -> Bool 的值转换为预期的参数类型 NSPredicate