在关闭挂钩消息出现之前,GUI应用程序将关闭

时间:2014-05-17 16:53:06

标签: java multithreading swing windowlistener shutdown-hook

Java新手在这里。这是交易: 我有以下简单的shutdown-hook:

class SHook implements Runnable {
public void run() {
    System.out.println("SH is done.");
}
}

我有一个带有TextArea的GUI应用程序,输出被重定向,因此消息显示在那里。它的窗口监听器再次非常简单:

public class MyAdapter extends WindowAdapter {
public void windowClosing(WindowEvent w){
    System.exit(0);
}
}

当我使用[X]按钮关闭GUI应用程序时,消息会在整个事件关闭之前显示一瞬间。这里没有错。

我想要做的是:在邮件打印完毕后,等待几秒钟,足以清楚地看到邮件已被打印。 在运行方法中添加 sleep 等待或其他任何方法似乎无法正常工作,因为应用程序仍会立即关闭。

我猜测shutdown-hook实际上正在正常工作,它只是应用程序不关心并立即关闭GUI,而我的钩子在其中的某处显示其消息Java limbo。

这是对的吗?如果是,是否有任何简单的方法可以确保GUI应用程序仅在关闭挂钩完成后关闭,而不会使shutdown-hook成为非关闭挂钩?

1 个答案:

答案 0 :(得分:0)

在您的JFrame调用方法中:

setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);

然后确保使用方法WindowAdapterJFrame添加到adWindowListener

然后在windowClosing中添加一些println以查看它何时被调用,当然如果您希望关闭帧,则使用System.exit(0)中的windowClosing