【发布时间】:2013-03-10 22:02:40
【问题描述】:
这是我的主要方法,它包含一个shutdownhook:
public static void main(String args[]) {
Runtime.getRuntime().addShutdownHook(new Thread() {
@Override
public void run() {
JOptionPane.showMessageDialog(null, "Shutdown hook");
}
});
/* Create and display the form */
java.awt.EventQueue.invokeLater(
new Runnable() {
@Override
public void run() {
Thread.setDefaultUncaughtExceptionHandler(new MyUncaughtExceptionHandler());
MyFrame frame = new MyFrame();
frame.setVisible(true);
}
});
}
问题是JOptionPane 根本没有出现。相反,框架关闭,但应用程序本身仍在运行。
PS。我不能使用 WindowClosing 事件,因为它不会在 Mac OS X 上的 Cmd+Q 命令上触发。 p>
【问题讨论】:
-
可能是因为在执行关闭挂钩时 awt 事件调度程序已经关闭?
-
@SpaceTrucker 有什么建议吗?
-
绝对不要使用关机钩子。寻找另一种机制。
-
可能是this?
-
来自 addShutdownHook 的 javadoc:
Shutdown hooks should also finish their work quickly.所以我想显示一个对话框是一个非常糟糕的主意。您应该重新考虑为什么需要关闭挂钩。
标签: java swing events shutdown-hook