2012-12-07 94 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

謝謝。這回答了我的問題。 –