0

如果我在edt中創建的線程內修改我的gui,會發生什麼情況?我應該在EDT中創建的線程中調用InvokeLater嗎?

,當我說「在美國東部時間創建」其實我說的線程聲明和其開始在包圍的代碼塊:

SwingUtilities.invokeLater(new Runnable(){ 

    public void run(){ 

     Thread t= new Thread(new Runnable(){ 

     public void run(){ 

      txtField.setText("setting..."); 
     } 
     }); 

     t.start(); 
    } 
} 

將在修改我的GUI沒有副作用?或者我應該再次調用線程「T」內的invokeLater?

+3

這是與EDT不同的線程,因此修改擺動組件並不安全。所以是的,如果你需要訪問swing組件,你應該在't'中調用'invokeLater()'。 – kiheru

回答

3

是否在EDT中實例化和運行線程無關緊要。它將是一個獨立於EDT運行的新線程,因此從它修改GUI是不安全的。所有Swing修改必須使用invokeLater()完成。

相關問題