各种 OS X 版本上的 Apple JVM 显然已被破坏,因为它们不会在应该生成 WindowClosing 事件时(例如,如果您通过单击关闭按钮关闭应用程序的主 JFrame)。
(在最近的 Apple Java 更新中,您可以设置一个属性来强制生成事件,但这不是我想要的)
我的问题很简单:我想在用户关闭应用程序时显示“提示”。但是我不能(由于没有生成事件)检测到用户关闭了窗口。
所以我想我可以使用关闭钩子:
Runtime.getRuntime().addShutdownHook(...)
然而,显然从关闭挂钩创建 JFrame 似乎有问题:就像一旦调用关闭挂钩,EDT 就已经消失了。
我尝试了几件事,但似乎没有什么真正有意义:就像我的“提示”JFrame 保持灰色(尽管从任何地方调用它时它工作正常,但关闭挂钩)或程序立即退出。我尝试使用闩锁并等待关闭挂钩的闩锁,但就好像 EDT 不再存在一样。
我目前正在认真考虑生成第二个 Java 应用程序只是为了将工具提示显示为一种解决方法,但我认为这有点矫枉过正(但至少它会起作用)。
有没有人尝试过从关闭挂钩创建一个窗口并在 EDT 上调用一些东西,并且有什么需要注意的问题吗?(请记住,由于已知的长期存在的 Apple VM 错误,我无法可靠地捕获 OS X 上的窗口关闭事件)。