【发布时间】:2014-05-17 16:53:06
【问题描述】:
Java 新手在这里。这是交易: 我有以下简单的关机钩子:
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 应用程序时,消息会在整个关闭之前显示一瞬间。这里没有错。
我想做的是:消息打印后,等待几秒钟,足以清楚地看到消息已打印。 在 run 方法中添加 sleep 或 wait 或其他任何东西似乎都不起作用,因为应用程序仍会立即关闭。
我猜shutdown-hook实际上正在正常工作,只是应用程序不在乎并立即关闭GUI,而我的钩子在Java边缘的某个地方打印了它的消息。
正确吗?如果是,是否有任何简单的方法来确保 GUI 应用程序仅在关闭挂钩完成后关闭,而不使关闭挂钩成为非关闭挂钩?
【问题讨论】:
-
您不能为此使用关闭挂钩,Swing 不一定会在那里显示任何内容。还有一个问题是您需要在 EDT 上运行 all GUI 代码 - 您的关闭挂钩违反了此规则。至于在关机时运行代码 - 编写
shutdown()方法并调用它有什么问题吗?或者在您的主框架中添加一个onClose侦听器? -
您提到的可能替代方案没有错,我很想知道是否有任何方法可以通过关闭挂钩来做到这一点。谢谢你的回答。
标签: java multithreading swing windowlistener shutdown-hook