为什么 JDialog 在 JOptionPane showMessageDialog 之后没有关闭?

Why JDialog doesn't close after JOptionPane showMessageDialog?

当我的服务器应用程序启动时,JDialog 打开以向用户指示应用程序正在加载。但是在 JDialog 打开和关闭之间,我使用 JOptionPane.showMessageDialog() 显示另一条消息。

问题是,如果我在关闭 JDialog 之前显示这条新消息,那么即使我关闭 JOptionPane 对话框,JDialog 也永远不会关闭。如果我删除 JOptionPane 对话框,那么 JDialog 将照常关闭。

为什么打开JOptionPane.showMessageDialog()禁用JDialog关闭?

是用这个代码打开JDialog:

final JDialog dlg = new JDialog(this, "Veuillez patienter, le serveur démarre...", true);
dlg.setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);
dlg.setSize(300, 75);
dlg.setResizable(false);
dlg.setLocationRelativeTo(this);         
Thread t = new Thread(() -> {
    dlg.setVisible(true);
});
t.start();

并使用此代码关闭它:

dlg.setVisible(false);

在这些代码行之间,我这样做是为了打开消息对话框:

JOptionPane.showMessageDialog(this, String.format(I18n.i18n.getString("PopupWifiCreated"), this.SSID, this.password), null, JOptionPane.INFORMATION_MESSAGE);

有人有想法吗?

谢谢。

在我看来,将任何框架的可见性设置为 false 并不是最好的主意。当然这取决于你的目标是什么,但我仍然不推荐它。应该像这样完成:

    dlg.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);

    dlg.close();
or
    dlg.dispose();

如果仍然无法正常工作,请尝试颠倒对话框的顺序 - 首先显示 messageDialog,然后显示 JDialog。