1

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

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

}

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

谢谢。

4

1 回答 1

1

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

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

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

于 2012-12-07T08:12:28.377 回答