<分区>
这是一个“最佳实践”类型的问题。据我所知,当需要在 JVM 关闭之前执行任务时,有两种方法(可能还有更多……):
- 向容器添加一个
WindowListener
并覆盖windowClosing
事件 - 添加一个关闭钩子(Hook)(即
Runtime.addShutdownHook
)
对于 Java 桌面应用程序,哪种方法是“首选”方法?有“首选”方式吗?
<分区>
这是一个“最佳实践”类型的问题。据我所知,当需要在 JVM 关闭之前执行任务时,有两种方法(可能还有更多……):
WindowListener
并覆盖windowClosing
事件Runtime.addShutdownHook
)对于 Java 桌面应用程序,哪种方法是“首选”方法?有“首选”方式吗?
最佳答案
不是最佳实践,也不是首选方式,只是关闭当前 JVM 实例,非常简单,
1) Top-LevelContainer#setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
2) 添加WindowListener
WindowListener exitListener = new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
int confirm = JOptionPane.showOptionDialog(null,
"Are You Sure to Close Application?", "Exit Confirmation",
JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE,
null, null, null);
if (confirm == JOptionPane.YES_OPTION) {
Top-LevelContainer#setVisible(false);
// clean-up everything
// on error display JOptionPane with error mgs but from
// another JVM instance, e.g.jar file, see add 3.)
System.exit(1); //in some cases not works System.exit(0);
}
}
3) here剩下的就是如何显示来自另一个新 JVM 实例的错误消息
关于java - 如何确保在关闭 Java 桌面应用程序时执行任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7903333/