0

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方法添加睡眠等待或其他任何内容似乎都不起作用。

我猜shutdown-hook实际上正在正常工作,只是应用程序不在乎并立即关闭GUI,而我的钩子在Java边缘的某个地方打印了它的消息。

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

4

1 回答 1

0

在您的 JFrame 调用方法上:

setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);

然后确保将您WindowAdapter的添加到JFramewith 方法adWindowListener中。

然后windowClosing放入一些 println 以查看它何时被调用,当然如果你想关闭框架,请使用System.exit(0)in 。windowClosing

于 2014-05-17T17:05:08.800 回答