Java中线程中的消息对话

时间:2012-03-05 11:05:59

标签: java multithreading swing

如何从线程中显示对话框?我有一个Swing应用程序,它在后台执行一组动作。完成处理后,我需要显示一个消息对话框。主要的Swing应用程序是“Always On Top”。

JOptionPane.showMessageDialog(null, "Hello");

不会显示上面的消息框。好吧,我需要在线程的run方法中编写上面的行。

更多数据:

通过扩展Thread Class来创建线程。从按钮单击的EDT调用start方法。

3 个答案:

答案 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进行了测试,或者包含在invokeLaterinvokeAndWait中(取决于返回值Thread),

Swing si单线程和所有输出到Swing GUI必须在EDT上完成(Concurency in Swing中的更多内容),否则您只能看到thin toolbar close button且没有内容也不是JComponents