gpt4 book ai didi

java - 不合规 JVM 不发送 WindowClosing 事件的解决方法

转载 作者:行者123 更新时间:2023-12-01 15:42:49 25 4
gpt4 key购买 nike

各种 OS X 版本上的 Apple JVM 显然已被破坏,因为它们在应该生成 WindowClosing 事件时却没有生成(例如,如果您通过单击关闭按钮来关闭应用程序的主 JFrame)。

(在最近的 Apple Java 更新中,您可以设置一个属性强制生成事件,但这不是我想要的)

我的问题很简单:我想在用户关闭应用程序时显示“提示”。但是我无法(由于没有生成事件)检测到用户关闭了窗口。

所以我想我可以使用关闭钩子(Hook):

Runtime.getRuntime().addShutdownHook(...)

但是显然从关闭 Hook 创建 JFrame 似乎有问题:就像调用关闭 Hook 后 EDT 已经消失一样。

我尝试了几件事,但似乎没有什么真正有意义的:就像我的“提示”JFrame 保持全灰色(尽管从除关闭 Hook 之外的任何地方调用时它都工作正常)或程序立即退出。我尝试使用闩锁并等待关闭钩子(Hook)上的闩锁,但就好像 EDT 不再存在一样。

我目前正在认真考虑生成第二个 Java 应用程序,只是为了显示工具提示作为解决方法,但我认为这有点矫枉过正(但至少它会起作用)。

是否有人尝试过从关闭 Hook 创建窗口并调用 EDT 上的内容,是否有任何需要注意的问题? (请记住,由于已知的长期存在的 Apple VM 错误,我无法可靠地捕获 OS X 上的窗口关闭事件)。

最佳答案

如果窗口实际上正在关闭并且应用程序正在停止,则说明正在调用 JFrame.dispose() 方法。覆盖它,并在其中添加您的代码。

否则,您可以添加一个守护进程线程来监听窗口监听器上的关闭方法,该守护进程可以添加工具提示,然后处理窗口。您可以延迟处理,直到工具提示完成。

我从来没有听说过这个错误,但既然苹果没有发布自己的 jdk,事情只会变得更好。

关于java - 不合规 JVM 不发送 WindowClosing 事件的解决方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7748882/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com