2012-12-07 61 views
1

我在代码库中发现了下面这段代码,我不明白它是如何工作的。我在Swing有点新手,因此如果它看起来像一个愚蠢的问题,很抱歉。这个方法invokeOnEventDispatchThread做什么?

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

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

  • 要么你已经是在美国东部时间执行和代码,只需运行
  • 或者你是不是和方法将等到可运行已经由EDT

特别是执行,invokeAndWait的Javadoc指出,该方法不应该在美国东部时间因此2个分支在你的代码中调用。

+0

感谢您的回复。 “要么你已经在EDT执行了,而且代码只是运行” - 代码是否立即运行?还是将它放入事件队列并在轮到它时运行? –

+0

'r.run()'总是立即在当前线程中运行,无论是否为EDT都没有区别。所以是的,它立即运行,没有它不在队列中。该队列仅适用于非EDT线程。 – assylias

+0

谢谢。这回答了我的问题。 –