在shutdownHook中添加Joptionpane

时间:2009-09-09 13:49:42

标签: java

有没有办法在shutdownhook中显示joptionpane 即我需要在shutdownhook事件中显示confirmdailog

4 个答案:

答案 0 :(得分:5)

如果有,它将无济于事。

作为JVM关闭的一部分,异步调用关闭挂钩,因此“确认”对话框无法确认任何内容,因为您无法暂停或撤消关闭过程。

答案 1 :(得分:1)

我怀疑你想要的不是关机钩子,而是“真的放弃了吗?” JOptionPane的。如果是这样,这是一个如何做的例子:

import javax.swing.*;
import java.awt.event.*;

public class ConfirmToCloseTest {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                final JFrame frame = new JFrame();
                frame.addWindowListener(new WindowAdapter() {
                    public void windowClosing(WindowEvent e) {
                        if (JOptionPane.showConfirmDialog(frame, "Really quit?", "", JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION) {
                            System.exit(0);
                        }
                    }
                });
                frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
                frame.getContentPane().add(new JLabel("Hello world"));
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

}

答案 2 :(得分:1)

关闭挂钩应该快速执行。等待用户做出决定并不是关闭钩子的意图。交互式程序中的关闭钩子没有意义。关闭挂钩的真实用例是在JVM异常终止时释放资源和其他内务处理。

答案 3 :(得分:0)

当用户完成程序但未完成某些提交操作(关闭未保存更改的文档)时,您似乎想要某种提示。如果是这种情况,我会在窗口上放置一个WindowListener,其关闭应触发提示并覆盖windowClosing(WindowEvent e){...}以显示您的JOptionPane。根据JavaDocs,您可以在此时覆盖windowClosing。这使您有机会对未保存更改的文档进行“保存,放弃,取消”diaglog。