Java 为什么赢了';这难道不管用吗?

Java 为什么赢了';这难道不管用吗?,java,swing,events,shutdown-hook,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"); }

这是我的主要方法,它包含一个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
根本不显示。相反,框架关闭,但应用程序本身仍在运行。
另外,我不能使用
WindowClosing
事件,因为它不会在Mac OS X上的Cmd+Q命令上触发。

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


您需要找到另一种捕获退出事件的方法,shutdownhook就在那里,这样您就可以在VM退出时进行清理,因此,在调用UI时,您确实不想在UI中占用更多资源。

可能是因为在执行关闭挂钩时awt事件调度程序已经关闭了?@SpaceTrucker有什么建议吗?绝对不要使用关闭挂钩。找到另一种机制。也许?从addShutdownHook的javadoc中:
关闭钩子也应该很快完成它们的工作。
所以我想显示一个对话框是一个非常糟糕的主意。你应该重新考虑为什么你需要一个关机挂钩。