【发布时间】:2014-04-23 10:57:22
【问题描述】:
我在将 JDialog 设置为非模态时遇到问题。 我需要在不阻止应用程序的其余部分的情况下显示一个弹出窗口。我尝试使用 SwingUtilities.invokeLater() 但顾名思义,它是在主线程的工作完成后才调用的。 为简化起见,这是我的代码:
BufferedReader reader = new BufferedReader(new FileReader(log));
JLabel validator = new JLabel("Validating - please wait");
JOptionPane pane = new JOptionPane(validator, JOptionPane.INFORMATION_MESSAGE,JOptionPane.NO_OPTION,null, new String[]{"Close"});
final JDialog dialog = pane.createDialog(null, "title");
dialog.setModal(false);
dialog.setVisible(true);
dialog.setVisible(true);
writer = validate(reader);
dialog.dispose();
对话框显示,但它是空的。如果我将它用作模态,它会显示得很好。我尝试将它与某些变体一起使用,例如:
JLabel validator = new JLabel("Validating - please wait");
JOptionPane pane = new JOptionPane(validator, JOptionPane.INFORMATION_MESSAGE,JOptionPane.NO_OPTION,null, new String[]{"Close"});
final JDialog dialog = pane.createDialog(null, "Validation in progress");
Runnable run = new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
dialog.setModal(false);
dialog.setVisible(true);
}
};
SwingUtilities.invokeLater(run);
writer = validate(reader);
但正如我所说,对话框调用对我来说太晚了。 (我也试过invokeAndWait,但是因为我不能从主线程调用它,所以我必须创建一个新线程,所以结果几乎是一样的。
你有什么建议吗?
【问题讨论】:
-
为什么不直接创建自己的对话框并添加
JOptionPane... -
我试过但仍然得到相同的结果。如果我将其设置为 Modal,我会得到完美的结果,但如果没有用户输入,我的应用程序将无法继续。如果我将其设置为非模态,则 GUI 将无法正确显示,但其余代码将工作文件。我应该从这个开始:我是一个彻头彻尾的 Swing 菜鸟。基本上我的意思是在验证阶段显示一个对话框,一旦它结束我需要关闭它(没有用户干预)。
-
您需要为应用程序启动代码以继续在显示对话框,然后显示对话框。