2012-05-14 71 views
6

如果您正在修改GUI並且您處於AWT事件調度線程(如ActionListener?)中,您應該使用SwingUtilities.invokeLater(Runnable)嗎?AWT事件調度中的SwingUtilities.invokeLater線程

+0

這取決於你想要完成什麼。 – Jeffrey

+0

@Jeffrey對不起,我編輯了這個問題。 – Stripies

+3

這仍然取決於你想要完成什麼。當你在'ActionListener'的'actionPerformed'方法中時,你在EDT上。但是,有些情況下,在所有其他偵聽器處理完相同的事件後,您需要執行某些操作,在這種情況下,您應該使用'invokeLater'。那麼你究竟在做什麼? – Jeffrey

回答

5

您必須始終在Event Dispatch Thread(EDT)中執行GUI更新。然而,正如Jeffrey在評論中指出的那樣,Swing對象上的ActionListener.actionPerformed方法是從EDT調用的已經

如果您只是想在JButton把目光啓用/ unenabled或從JList添加/刪除項目,您通過製作一個Swing組件的ActionListener這些變化,那麼你不應該有援引SwingUtilities.invokeLater明確。

+1

+1,如果OP試圖清除「JTextComponent」或重新定位「JScrollBar」,則可能需要調用「invokeLater」。但看到他只啓用/禁用JButton並修改JList,事實並非如此。 – Jeffrey

+0

@Jeffrey如果我這樣做,爲什麼會這麼做? – Stripies

+0

只要我們在EDT,使用'invokeLater'就沒有用處了。顯然,如果我們想在以後的某個時間點運行某些東西,就會出現與往常一樣的限制(即僅僅因爲我們從EDT啓動線程根本無助於我們)。 – Voo

相關問題