5

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

4

1 回答 1

2

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

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

于 2013-03-21T12:03:30.220 回答