为什么这个shutdownhook不起作用?

时间:2013-03-21 11:53:29

标签: java swing events shutdown-hook

这是我的主要方法,它包含一个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 命令。

1 个答案:

答案 0 :(得分:1)

调度线程已经关闭,或者在您提交队列之前可能会关闭。

你需要找到一种捕获quit事件的另一种方法,关闭钩子就在那里你可以在VM退出时整理一下,所以你真的不希望在调用它时在UI中占用更多资源