請考慮下面的代碼:創建和Swing線程上執行這是不好的編程習慣
public class MyClass extends javax.swing.JFrame {
private JTree jTree;
//Code ommited for clarity
public void methodCalledByAnotherThread(){
final DefaultTreeModel t = new DefaultTreeModel();
//Do some thing with t
SwingUtilities.invokeLater(new Runnable(){
public void Run(){
jTree.setModel(t);
}
});
}
}
MyClass
。在執行過程中有一段時間會啓動第二個線程,最終會調用methodCalledByAnotherThread()
。不會在Swing線程上調用此方法。
methodCalledByAnotherThread()
創建(本地)DefaultTreeModel
對象,並做了一些工作,但它因爲這不是在Swing線程不能將該模型設置爲jTree
因此呼籲SwingUtilities.invokeLater()
。在Swing線程上執行的Runnable對象中,它將LOCAL DefaultTreeModel
t設置爲JTree
。
我的問題是(而且我還沒有真正編譯和運行這段代碼,所以它可能無法正常工作)..是上述不良的編程習慣?如果是這樣,我怎樣才能將一個在非Swing線程上創建的TreeModel
設置爲一個Swing對象?
感謝您的快速回復。您是否有任何參考資料表示這是一種正確的方式? – Kerry 2012-02-02 19:36:37
我發現在這個問題發佈:http://stackoverflow.com/questions/5895481/update-jlabel-from-another-thread – 2012-02-02 19:38:45