gpt4 book ai didi

java - 从 ShutdownHook 访问 AWT

转载 作者:行者123 更新时间:2023-11-29 06:03:37 25 4
gpt4 key购买 nike

我试图提供一个非常简单的“你想保存这个文档吗?”关闭我的应用程序时的对话框。

我使用了 WindowAdapter 来做到这一点。如果使用任何 GUI 操作关闭应用程序(单击 CLOSE 按钮、从任务栏关闭、使用 End Task 从任务管理器关闭),这将非常有效。

但是,当用户注销或者杀掉应用进程时,JVM应用会直接收到一个终止信号。它在没有用户确认和调用 WindowAdapter 的情况下关闭任何 AWT 资源。使用 ShutdownHook,不可能有任何 GUI 交互,因为 AWT 事件调度线程已经停止。

到目前为止,我已经找到了多种解决此问题的方法:

  • 使用 JNI 或 JNA 在终止信号到达 AWT 子系统之前捕获它。
    • 需要为每个操作系统编写单独的代码。
  • 使用 sun.misc.SignalHandler 捕捉终止信号。
    • 使用 SUN 专有接口(interface)。不保证在其他 VM 上工作。
  • 使用 SWT 在终止信号到达 AWT 子系统之前捕获它。
    • 界面维护良好,但我讨厌为了解决这个小问题而引入 SWT。
  • 将用户数据保存到一个临时文件中,并在程序再次启动时进行清理。

还有其他更好的方法来解决这个问题吗?似乎很奇怪没有标准的方法来实现如此基本和初级的东西。我不能以某种方式再次启动 AWT 子系统吗?

最佳答案

主机平台拥有运行您的应用程序的 JVM。在 Mac OS X 上,您可以使用 OSXAdapter,已讨论 here .其他系统可能有类似的机制。一种有用的防御措施是使用 java.util.prefs.Preferences记录清理信息。它独立于平台,典型的实现为给定平台提供最大努力的保留。

关于java - 从 ShutdownHook 访问 AWT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9282528/

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