我正在运行一些在 swingworker 中打印输出的代码。我没有得到打印输出,所以我使用SwingUtilities.invokeLater
了,现在它可以工作了。没想到是这样的结果,怎么会这样?我原以为System.out.println
可以在 EDT 之外运行。
问问题
161 次
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 回答