繁体   English   中英

在shutdownHook中添加Joptionpane

[英]Adding Joptionpane in shutdownHook

有什么办法可以在shutdownhook中显示joptionpane,即我需要在shutdownhook事件中显示一个confirmdailog

如果有,它将无济于事。

关闭挂钩是作为JVM关闭的一部分异步调用的,因此“确认”对话框不会真正确认任何内容,因为您无法停止或反转关闭过程。

我怀疑您想要的不是关闭钩子,而是“真的退出了吗?” 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);
            }
        });
    }

}

关闭钩子应该可以快速执行。 等待用户做出决定不是关闭挂钩所要执行的操作。 交互式程序中的关闭挂钩没有意义。 关机钩子的真正用例是在JVM异常终止时释放资源和进行其他管理。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM