由於Swing中的組件是非執行緒安全的,所以在Swing中專門提供了一個執行緒用於對組件的安全訪問,這個執行緒就稱為事件派發執行緒(EDT)。
事件派發執行緒(Event Dispatch Thread)
事件派發執行緒是一個用來執行組件事件處理程式的執行緒(如按鈕的點擊事件),它是一個佇列,所以它的特點是一定要執行完上一個事件的處理程式後,才會處理下一個事件。事件派發線中的方法應該執行很快(一般用來更新組件的狀態), 不然界面就會死掉, 所以如果有很耗時的操作,最好另起一執行緒執行,而不應該直接放在事件派發執行緒中。
1.Swing的大部分組件是非執行緒安全的, 只能用單執行緒(Swing專門提供了事件派發執行緒)訪問,一旦其在界面上relized以後,為了保證其正確性,對其組件的操作和狀態的改變都應該在事件派發執行緒中執行。
2.引起組件realized的方法有pack(),setVisable(true)以及show()。
3.事件監聽器的方法都是在事件派發執行緒中執行的,如ActionListener的 actionPerformed方法。
4.如果對組件的操作或狀態的改變不是在事件派發執行緒中執行,那么應該用SwingUtilities.invokeLater inovkeAndWait方法,使其在事件派發執行緒中執行。