有没有办法在shutdownhook中显示joptionpane 即我需要在shutdownhook事件中显示confirmdailog
答案 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。