问题描述
我面临与this问题相同的问题。我正在尝试提供更多信息,以便获得一些答案。
我创建了一个要包含在系统托盘中的基于JavaFX的应用程序,然后使用属于系统托盘图标的菜单栏启用显示和关闭该应用程序。我已经使用this answer,尤其是this coding example来将应用程序部署到任务栏中。
就像其他遇到相同问题的线程所描述的那样,我在尝试退出应用程序时遇到了问题。我已经设置了Platform.setImplicitExit(false)
,并且正在调用退出该应用程序的单独方法:
private void exit() {
Platform.exit();
tray.remove(trayIcon);
}
我已经创建了该应用程序的可执行jar文件。如果我在Windows上运行它,一切正常。
如果我在Mac上运行它,则执行Platform.exit()
行,然后,下一行将无处可用。没有崩溃,也没有例外,并且没有在合理的时间内结束(等待了30分钟,但我确定几个小时后也不会发生任何事情)。
我唯一的想法是在this page的帮助下进行Java线程转储。
"JavaFX Application Thread" #12 prio=5 os_prio=31 tid=0x00007fe87a92a000 nid=0x307 in Object.wait() [0x00007ffee2157000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
at java.lang.Object.wait(Object.java:502)
at java.awt.EventQueue.invokeAndWait(EventQueue.java:1343)
- locked <0x00000007964a8e50> (a java.awt.EventQueue$1AWTInvocationLock)
at java.awt.Window.dodispose(Window.java:1210)
at java.awt.Window.dispose(Window.java:1147)
at sun.lwawt.macosx.CTrayIcon.dispose(CTrayIcon.java:140)
at java.awt.TrayIcon.removeNotify(TrayIcon.java:707)
at java.awt.SystemTray.remove(SystemTray.java:312)
- locked <0x0000000795c81ad8> (a java.awt.SystemTray)
at com.valcoba.vCom.gui.VComController.exit(VComController.java:574)
at com.valcoba.vCom.gui.VComController$$Lambda$308/1272434810.run(UnkNown Source)
at com.sun.javafx.application.PlatformImpl.lambda$null$5(PlatformImpl.java:295)
at com.sun.javafx.application.PlatformImpl$$Lambda$49/686728157.run(UnkNown Source)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.application.PlatformImpl.lambda$runLater$6(PlatformImpl.java:294)
at com.sun.javafx.application.PlatformImpl$$Lambda$48/1190035432.run(UnkNown Source)
at com.sun.glass.ui.invokelaterdispatcher$Future.run(invokelaterdispatcher.java:95)
据我所知,负责的线程处于WAITING
状态,我不知道它在等待什么,以及如何结束此等待。
我还尝试了用System.exit(0)
代替托盘图标的移除:
private void exit() {
Platform.exit();
System.exit(0);
}
当图标消失时,此操作就完成了,但根据this question,它看起来似乎很优雅。
有人有线索或替代解决方案吗?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)