这个方法invokeOnEventDispatchThread有什么作用?

时间:2012-12-07 07:50:08

标签: swing swingutilities

我在代码库中遇到了以下代码,我不明白它是如何工作的。我在Swing有点新手,如果这看起来像个愚蠢的问题就很抱歉。

public static void invokeOnEventDispatchThread(Runnable r){
try{
  if(SwingUtilities.isEventDispatchThread()){
    r.run();
  }else{
    SwingUtilities.invokeAndWait(r);
  }
}catch(Exception e){
  ;
}

}

这里会在事件派发线程中立即调用r.run()吗?方法的重点是r.run()被调用为asap,将其移动到队列的头部?

感谢。

1 个答案:

答案 0 :(得分:1)

该方法的重点是同步运行代码:

  • 要么你已经在EDT中执行而且代码只是运行
  • 或者您不是,并且该方法将等待EDT执行runnable

特别是,invokeAndWait的javadoc声明不应该在EDT上调用该方法,因此代码中有2个分支。