Java 在shutdownHook中添加Joptionpane
有没有办法在shutdownhook中显示joptionpaneJava 在shutdownHook中添加Joptionpane,java,Java,有没有办法在shutdownhook中显示joptionpane i、 e我需要在我的shutdownhook事件中显示confirmdailog如果有,它对您没有帮助 作为JVM关闭的一部分,关闭挂钩是异步调用的,因此“确认”对话框不会真正确认任何内容,因为您无法停止或反转关闭过程。当用户完成程序但尚未执行某些提交操作时,您似乎希望得到某种提示(使用未保存的更改关闭文档)。如果是这种情况,我会在窗口上放置一个WindowListener,该窗口的关闭将触发提示并覆盖windowClosing(
i、 e我需要在我的shutdownhook事件中显示confirmdailog如果有,它对您没有帮助
作为JVM关闭的一部分,关闭挂钩是异步调用的,因此“确认”对话框不会真正确认任何内容,因为您无法停止或反转关闭过程。当用户完成程序但尚未执行某些提交操作时,您似乎希望得到某种提示(使用未保存的更改关闭文档)。如果是这种情况,我会在窗口上放置一个WindowListener,该窗口的关闭将触发提示并覆盖windowClosing(WindowEvent e){…}以显示您的JOptionPane。根据JavaDocs,此时可以覆盖windowClosing。这使您有机会对具有未保存更改的文档进行“保存、放弃、取消”诊断日志。我怀疑您想要的不是关机挂钩,而是“真的退出?”作业窗格。如果是这样的话,下面是一个如何做到这一点的示例:
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);
}
});
}
}
关机挂钩应该能够快速执行。等待用户做出决定并不是关机挂钩的目的。交互式程序中的关机挂钩没有意义。关闭挂钩的实际用例是在JVM异常终止时释放资源和其他内务管理 好的,你可以通过让一个线程
wait()
永远等待()来防止JVM实际终止,但是对了,你不能阻止已经在运行的关机当用户注销导致JVM关闭时,这是不可能做到的。AWT子系统将关闭,对此您无能为力。