2009-10-10 17 views
0

我已經構建了自己的擴展JPanel組件。我已經添加了幾個方法,如calculateWhatever()... 我應該用invokeLater()調用這些方法嗎? 物質L & F並沒有抱怨,但我有罕見的隨機繪畫問題,我想知道如果他們正在擴展擺動組件內的計算髮生。使用擴展的Swing組件,線程疑問

回答

2

如果您正在進行大量計算,那麼在事件派發線程以外的線程中執行它們會比較謹慎。如果您使用的是JDK 1.6,則還可以使用SwingWorker類而不是invokeLater

+0

因此,僅僅是擴展擺動組件的方法意味着默認運行在EDT中? – ktulur 2009-10-10 08:12:03

+0

看看這篇文章。這是一個很好的總結。 http://java.sun.com/docs/books/tutorial/uiswing/concurrency/index.html – 2009-10-10 08:15:10

0

當您在這些方法中修改組件(或繪製)時,您只需使用invokeLater()(或使用SwingWorker)調用這些方法。如果您只是進行計算,則只需在例如訪問結果時進行同步。方法paint()

0

通常應使用SwingUtilities.invokeLaterSwingWorker將GUI組件的更改與任何潛在的鎖定方案(文件I/O或遠程服務器調用)或處理器密集型操作隔離。如果你的計算做了任何磁盤讀寫操作,或者如果你打電話給服務器,我建議你重新組織你的代碼,在AWT線程中完成你所有的繪畫調用。同樣,如果你意識到你的calc需要很長的時間才能完成,而且你的GUI看起來很慢,那麼將它們分開是明智的。