【发布时间】:2011-07-26 21:00:05
【问题描述】:
请解释 SwingUtilities 中的 invokeAndWait() 方法。我无法理解这一点。 解释的很清楚。 如果你用一个例子来尝试会很有帮助。
已编辑添加@noob 对问题的扩展:
this 有什么不清楚的地方?
这是一个修改后的用法示例:
import javax.swing.SwingUtilities;
public class InvokeAndWaitStuff
{
public static void main(String[] args)
{
final Runnable doHelloWorld = new Runnable() {
public void run() {
System.out.println("Hello World on " + Thread.currentThread());
}
};
Thread appThread = new Thread() {
public void run() {
try {
SwingUtilities.invokeAndWait(doHelloWorld);
}
catch (Exception e) {
e.printStackTrace();
}
System.out.println("Finished on " + Thread.currentThread());
}
};
appThread.start();
}
}
输出:
Hello World on Thread[AWT-EventQueue-0,6,main]
Finished on Thread[Thread-0,5,main]
为什么这很重要?:
导致 doHelloWorld.run() 成为 在 AWT 上同步执行 事件调度线程。这个电话 阻塞直到所有未决的 AWT 事件 已被处理并且(然后) doHelloWorld.run() 返回。这 当一个方法应该使用 应用程序线程需要更新 图形用户界面。
据我所知,这基本上是一个瓶颈,迫使 GUI 更新由单个线程同步执行,而不是由多个线程异步执行,这可能是不安全的。
【问题讨论】:
-
您阅读过文档吗?
-
向我们展示一些导致您缺乏理解的损坏代码,我们将向您展示有助于解决问题的固定代码。