2013-02-13 134 views
7

我有一個swing工作器,在後臺計算,同時更新JFrame中的progressBar。如何等待SwingWorker完成?

如何讓我的主線程等待doInBackground()完成?

我知道我可以把東西放在done()方法中,但我想知道是否有辦法讓程序等待(該線程是正確的)。

類似於模態JDialog會做的事情。

所以......

SwingWorker a = new SwingWorker(); 
a.execute 

doOtherStuff(); 

doOtherStuff只有doInBackground跑後完成,但沒有把該方法在SwingWorker類的實現()方法。

+0

SwingWorker代表「異步」操作。有了這個範例,應該在回調中處理「下一步」的事情 - 否則,將它用作異步事件源購買的東西很少。 JDialogs本身就是可怕的黑客..不是我推薦試圖模仿的東西。 – 2013-02-13 03:44:31

回答

9

簡而言之,是的。

SwingWorker#get會阻塞,直到doInBackground方法返回。

長的答案是,可能不是你想要做的。

如果從EDT和呼叫啓動SwingWorkerSwingWorker#get你會阻止EDT,防止它處理導致你回到你爲什麼使用SwingWorker的原因的任何更新。

在這種情況下,您有兩種選擇。你可以給SwingWorker提供一個回調界面,一旦SwingWorker完成,它將能夠從done調用。或者您可以將PropertyChangeListener附加到SwingWorker並監視值state,等待它等於StateValue.Done