Swing 这个方法调用EventDispatchThread做什么?
我在我的代码库中遇到了下面的一段代码,我不明白它是如何工作的。我在Swing方面有点新手,因此如果这是一个愚蠢的问题,请原谅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
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线程。谢谢。这回答了我的问题。