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成为非关闭挂钩?
答案 0 :(得分:0)
在您的JFrame调用方法中:
setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
然后确保使用方法WindowAdapter
将JFrame
添加到adWindowListener
。
然后在windowClosing
中添加一些println以查看它何时被调用,当然如果您希望关闭帧,则使用System.exit(0)
中的windowClosing
。