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

时间:2016-01-19 09:49:23

标签: java dialog joptionpane jdialog

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

问题是,如果我在关闭JDialog之前显示此新消息,那么即使我关闭JDialog对话框,JOptionPane也永远不会关闭。如果我删除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);

有人有想法吗?

感谢。

1 个答案:

答案 0 :(得分:0)

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

    dlg.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);

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

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