如何从线程中显示对话框?我有一个Swing应用程序,它在后台执行一组动作。完成处理后,我需要显示一个消息对话框。主要的Swing应用程序是“Always On Top”。
JOptionPane.showMessageDialog(null, "Hello");
不会显示上面的消息框。好吧,我需要在线程的run方法中编写上面的行。
更多数据:
通过扩展Thread Class来创建线程。从按钮单击的EDT调用start方法。
答案 0 :(得分:1)
尝试使用SwingUtilities.invokeLater
调用它,以便将其转发以执行到UI线程:
// thread run method
public void run() {
...
SwingUtilities.invokeLater(new Runnable() {
public void run() {
JOptionPane.showMessageDialog(null, "Hello");
}
});
}
答案 1 :(得分:1)
将引用传递给主应用,而不是null
来电中的showMessageDialog()
。
还要确保在EDT中调用它。例如,使用SwingUtilities.invokeLater
答案 2 :(得分:1)
您可以从Thread
调用JOptionPane.showMessageDialog()或JOptionPane.showInternalMessageDialog(),但您已经对isEventDispatchThread
进行了测试,或者包含在invokeLater
或invokeAndWait
中(取决于返回值Thread
),
Swing si单线程和所有输出到Swing GUI必须在EDT上完成(Concurency in Swing中的更多内容),否则您只能看到thin toolbar
close button
且没有内容也不是JComponents