事件派發執行緒

由於Swing中的組件是非執行緒安全的,所以在Swing中專門提供了一個執行緒用於對組件的安全訪問,這個執行緒就稱為事件派發執行緒(EDT)。

事件派發執行緒(Event Dispatch Thread)
事件派發執行緒是一個用來執行組件事件處理程式的執行緒(如按鈕的點擊事件),它是一個佇列,所以它的特點是一定要執行完上一個事件的處理程式後,才會處理下一個事件。事件派發線中的方法應該執行很快(一般用來更新組件的狀態), 不然界面就會死掉, 所以如果有很耗時的操作,最好另起一執行緒執行,而不應該直接放在事件派發執行緒中。
1.Swing的大部分組件是非執行緒安全的, 只能用單執行緒(Swing專門提供了事件派發執行緒)訪問,一旦其在界面上relized以後,為了保證其正確性,對其組件的操作和狀態的改變都應該在事件派發執行緒中執行。
2.引起組件realized的方法有pack(),setVisable(true)以及show()。
3.事件監聽器的方法都是在事件派發執行緒中執行的,如ActionListener的 actionPerformed方法。
4.如果對組件的操作或狀態的改變不是在事件派發執行緒中執行,那么應該用SwingUtilities.invokeLater inovkeAndWait方法,使其在事件派發執行緒中執行。
5.invokeLater是異步方法,在方法還沒執行完就返回, 而inovkeAndWait是同步方法,要等方法執行完後再返回.而且在任何執行緒中調用invokeLater都不會異常,而在事件派發執行緒中調用inovkeAndWait會拋出異常, 如果在調用執行緒與invokeLater或inovkeAndWait方法中的執行緒有順序關係,可以使用inovkeAndWait,若沒有推薦使用invokeLater。因為inovkeAndWait將會帶來一個產生死鎖的必要條件--等待運行(意思就是調用執行緒要等到被調執行緒結束後才能運行).

相關詞條

熱門詞條

聯絡我們