Swing 这个方法调用EventDispatchThread做什么?

Swing 这个方法调用EventDispatchThread做什么?,swing,swingutilities,Swing,Swingutilities,我在我的代码库中遇到了下面的一段代码,我不明白它是如何工作的。我在Swing方面有点新手,因此如果这是一个愚蠢的问题,请原谅 public static void invokeOnEventDispatchThread(Runnable r){ try{ if(SwingUtilities.isEventDispatchThread()){ r.run(); }else{ SwingUtilities.invokeAndWait(r); } }catch(Except

我在我的代码库中遇到了下面的一段代码,我不明白它是如何工作的。我在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执行runnable

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

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

  • 或者您已经在EDT中执行,代码只是简单地运行
  • 或者您没有,并且该方法将等待EDT执行runnable

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

感谢您的回复。“或者您已经在EDT中执行,并且代码只是简单地运行”——代码只是立即运行吗?还是将其放入事件队列并在轮到它时运行?
r.run()
始终在当前线程中立即运行,无论它是否是EDT都没有区别。因此,是的,它立即运行,不,它不被放入队列。该队列仅用于非EDT线程。谢谢。这回答了我的问题。谢谢你的回答。“或者您已经在EDT中执行,并且代码只是简单地运行”——代码只是立即运行吗?还是将其放入事件队列并在轮到它时运行?
r.run()
始终在当前线程中立即运行,无论它是否是EDT都没有区别。因此,是的,它立即运行,不,它不被放入队列。该队列仅用于非EDT线程。谢谢。这回答了我的问题。