为什么 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。
当我的服务器应用程序启动时,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。