線程和Swing

    基於效率和用戶可擴展性的考慮,swing被設計成非線程安全的。swing程序中有兩個線程被前後建立main主線程事件分派線程,main可能很快就退出了,swing事件響應代碼在事件分派線程中執行。java

    若須要完成一個耗時的任務,則能夠啓動一個新線程來處理。可是不能在新線程中直接操做swing組件!這可能致使swing崩潰。一種狀況就是咱們須要在更新界面的進度條或標籤等。處理的辦法是使用java.awt.EventQueue,將更新界面的代碼放入static的invokeLater或invokeAndWait方法中。如更新一個標籤[1]安全

  
  
  
  
  1. EventQueue.invokeLater(new Runnable(){ 
  2.      public void run(){ 
  3.            lable.setText(percentage + "% complete"); 
  4.      } 
  5. }); 

這樣就將事件發佈到事件隊列中。沒有新的線程被建立!異步

invokeLater方法直接返回,run()被異步執行。ide

invokeAndWait則直到run()執行結束返回。spa

 

[1]Java2核心技術卷2高級特性7th線程

相關文章
相關標籤/搜索