【问题标题】:Why won't this shutdownhook work?为什么这个shutdownhook 不起作用?
【发布时间】: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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-06
    • 1970-01-01
    • 2014-01-01
    • 2013-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多