我在代码库中遇到了以下一段代码,我不明白它是如何工作的。我是 Swing 的新手,因此如果这看起来像一个愚蠢的问题,我很抱歉。
public static void invokeOnEventDispatchThread(Runnable r){
try{
if(SwingUtilities.isEventDispatchThread()){
r.run();
}else{
SwingUtilities.invokeAndWait(r);
}
}catch(Exception e){
;
}
}
这里会在事件调度线程中立即调用 r.run() 吗?方法的重点是否是尽快调用 r.run(),将其移动到队列的头部?
谢谢。
该方法的要点是同步运行代码:
- 要么您已经在 EDT 中执行并且代码只是运行
- 或者你不是,该方法将等到 EDT 执行可运行对象
特别是,用于 invokeAndWait 的 javadoc 指出,该方法不应在 EDT 上调用,因此代码中有 2 个分支。