invokeAndWait 方法 in SwingUtilities
请解释 SwingUtilities 中的 invokeAndWait() 方法。我无法理解这一点。解释得很清楚。如果您尝试使用示例,这将有很大的帮助。
编辑以添加@noob问题的扩展:
这有什么不清楚的?
下面是一个修改后的用法示例:
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 时,应使用此方法。
据我所知,这基本上是一个瓶颈,它迫使GUI更新由单个线程同步执行,而不是由多个线程异步执行,这可能不安全。