我试图提供一个非常简单的“你想保存这个文档吗?”关闭我的应用程序时的对话框。
我使用了 WindowAdapter
来做到这一点。如果使用任何 GUI 操作关闭应用程序(单击 CLOSE 按钮、从任务栏关闭、使用 End Task 从任务管理器关闭),这将非常有效。
但是,当用户注销或者杀掉应用进程时,JVM应用会直接收到一个终止信号。它在没有用户确认和调用 WindowAdapter
的情况下关闭任何 AWT 资源。使用 ShutdownHook
,不可能有任何 GUI 交互,因为 AWT 事件调度线程已经停止。
到目前为止,我已经找到了多种解决此问题的方法:
- 使用 JNI 或 JNA 在终止信号到达 AWT 子系统之前捕获它。
- 使用 sun.misc.SignalHandler 捕捉终止信号。
- 使用 SUN 专有接口(interface)。不保证在其他 VM 上工作。
- 使用 SWT 在终止信号到达 AWT 子系统之前捕获它。
- 界面维护良好,但我讨厌为了解决这个小问题而引入 SWT。
- 将用户数据保存到一个临时文件中,并在程序再次启动时进行清理。
还有其他更好的方法来解决这个问题吗?似乎很奇怪没有标准的方法来实现如此基本和初级的东西。我不能以某种方式再次启动 AWT 子系统吗?
Tôi là một lập trình viên xuất sắc, rất giỏi!