2

我正在运行一些在 swingworker 中打印输出的代码。我没有得到打印输出,所以我使用SwingUtilities.invokeLater了,现在它可以工作了。没想到是这样的结果,怎么会这样?我原以为System.out.println可以在 EDT 之外运行。

4

4 回答 4

2

这本来很容易测试(不是说,即使输入所有代码来测试它也比在此处发布它的工作量少):

import java.awt.EventQueue;
public class HelloWorld {
  public static void main( String[] args ) {
    System.out.println("Hello world");
    System.out.println( EventQueue.isDispatchThread());
  }
}

结果是

Hello world
false

在控制台上。

所以是的,System.out.println可以在 EDT 之外使用

于 2012-06-28T21:03:30.833 回答
1

我会认为system.out.println 可以在edt 之外运行。

那是真实的。要对此进行测试,请创建一个线程,在其中放置循环和打印输出并亲自查看:)

于 2012-06-28T20:30:18.877 回答
0

System.out.println 确实在 edt 之外运行。当你使用 swingworker 运行它时,你让它在里面运行。从理论上讲,您应该始终能够直接从代码块中打印结果。我建议:

Runnable runnable = new Runnable() {

        public void run() {

        }
    };
SwingUtilities.invokeLater(runnable);
于 2012-06-28T20:35:41.560 回答
0

虽然可以,但除了调试之外,它的应用程序很少。

替代输出的示例是 JOptionPane:

JOptionPane.showMessageDialog(frame/* sets up the message, can also be replaced with null to remove formatting*/,
"Eggs are not supposed to be green."/* this is your main message*/,
"A plain message"/* this is what shows in the title spot (first parameter must not be null)*/,
JOptionPane.PLAIN_MESSAGE/*shows no icon, also replacable with WARNING_MESSAGE, ERROR_MESSAGE, INFORMATION_MESSAGE*/);

所有这些都在一行上,但我将它分解为在这里格式化一行版本:

JOptionPane.showMessageDialog(frame/* sets up the message, can also be replaced with null to remove formatting*/, "Eggs are not supposed to be green."/* this is your main message*/, "A plain message"/* this is what shows in the title spot (first parameter must not be null)*/, JOptionPane.PLAIN_MESSAGE/*shows no icon, also replacable with WARNING_MESSAGE, ERROR_MESSAGE, INFORMATION_MESSAGE*/);

没有评论:

JOptionPane.showMessageDialog(frame, "Eggs are not supposed to be green.", "A plain message", JOptionPane.PLAIN_MESSAGE);

在你的程序中用苏斯博士的名言来欺骗你的老师是很有趣的。

于 2012-06-28T21:56:28.933 回答