2011-12-24 55 views
3

我有一個SwingWorker,它在後臺執行一些計算(這些操作位於覆蓋的doInBackground()方法中)。所以,我也使用​​方法開始計算。如何在完成這些計算後得到結果?SwingWorker得到結果

+0

分享一些代碼! – 2011-12-24 16:44:36

+0

現在沒有代碼。現在我想想如何連接SwingWorker和我的模型以及應用程序的MVC結構視圖 – dizpers 2011-12-24 17:02:12

回答

2

覆蓋done方法 - 該方法將在工作完成時調用。 Oracle有一個全面的教程在這裏:Improve Application Performance With SwingWorker in Java SE 6

還看到另一個SO問題:How do I use SwingWorker in Java?

你可以叫get檢索結果,但如果工人沒有完成的線程將阻塞,直到工人完成。這意味着如果您從事件調度線程(EDT)調用get,那麼如果工作人員沒有完成,您的GUI將不會響應。您可以致電isDone以確定工人是否已完成工作。

最後,您可以附加一個屬性更改偵聽器,以通知工作人員的進度,包括何時完成其任務。我發佈的第一個鏈接就是一個例子。

+0

thx!我會嘗試! mayby有一些在MVC中使用SwingWorker的常見模式? – dizpers 2011-12-24 17:10:48

+1

@dizpers,是的 - Swing Worker和它可以從UI中分離出來的工作。將監聽器附加到工作人員,並在工作人員完成時更新UI。如果您希望用戶界面讓用戶瞭解進度,您還可以觸發「PropertyChangeEvent」來識別中間進度。 – Paul 2011-12-24 17:17:43

+0

get()正式記錄在哪裏? – 2015-03-30 16:18:21

4

您可以覆蓋done()和/或process(),如herehere所示。

+0

我需要完全返回語句。如果我只是調用我的工人的doInBackground方法,會發生什麼? – dizpers 2011-12-24 17:00:30

+2

它會運行,可能會阻止美國東部時間。相反,實例化worker和'execute()'它,如示例中所示。 – trashgod 2011-12-24 17:08:58

+0

@dizpers _什麼時候會發生,我只是叫doInBackground_地獄崩潰;-)像往常一樣,當你做某些事情**非常錯誤** - 只需堅持在java文檔和關於併發性教程一章中廣泛解釋的用法Swing – kleopatra 2011-12-25 12:32:43