2013-02-14 51 views
-1

有沒有一種方法可以讓我做的SwingWorker(在doInBackground方法)來對代碼的某一點,停在那裏,監視ceratin變量,然後繼續當變量變爲可接受值?讓SwingWorker的等待變量更新

我知道我能做到這一點:

do { 
    Thread.sleep(500); 
} while (variable == false); 

但是,這是做的一個非常醜陋的方式...

有什麼建議?

編輯: 所以等待和通知是那麼......不過,我absolutley不知道如何實現它,甚至讀取多個教程後...

因此,這裏是我目前的狀況:

我有一個的SwingWorker,做在doInBackground方法東西:

doInBackground() 
{ 
    doSomething(); 
    //BLOCK (PAUSE) HERE 
    doSomethingElse(); 
} 

在另一邊,我已經具有偵聽的對象連接,其被觸發時doSomething的();被執行。

doSomethingElse()存取並改變類似的東西作爲監聽器,因此,它們彼此干擾。

所以我的目標是添加一行代碼,這將提升擋掉的doInBackground()代碼的聽衆。下面是使用監聽器類的樣子:

public class myClass extends JPanel() 
{ 
    addComponentListener(new ComponentAdapter() 
    { 
     @Override 
     public void componentResized(ComponentEvent arg0) 
     { 
      doThings(); 
      //LIFT BLOCK AND LET THE SWINGWORKER CODE CONTINUE 
     } 
    } 
} 

因此,操作的順序應該是:

doSomething(); 
doThings(); 
doSomethingElse(); 

另外,我可以從SwingWorker的訪問監聽器,而不是其他方式(但我可能能夠使其工作);

而最後一件事:監聽器不僅被調用的SwingWorker,它可以從其他來源(例如用戶)被調用,當SwingWorker的甚至沒有被instantialized。

+1

爲什麼重複提問兩次相同的問題?爲什麼不澄清你之前的問題? – 2013-02-14 03:33:34

+1

因爲我錯了。而且(以我的經驗),當我錯誤地問一個問題然後糾正問題時,我沒有得到任何迴應,至少不會有一段時間。 此外,這看起來比以前的一堆文本好得多。我做了清除前面的問題...... – Karlovsky120 2013-02-14 03:35:15

+0

'對象#wait'和'對象#notify' – MadProgrammer 2013-02-14 03:37:02

回答

2

您可以使用從並行庫的工具之一如的CountDownLatch。

+1

對於[示例](http://stackoverflow.com/a/11372932/230513)。 – trashgod 2013-02-14 11:18:50