-1

SwingWorker (doInBackground メソッド内) をコードの特定のポイントに到達させ、そこで停止し、特定の変数を監視し、変数が許容値に変化したときに再開する方法はありますか?

私はこれを行うことができることを知っています:

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

しかし、それは非常に醜い方法です...

助言がありますか?

編集:だから待って、それを通知してください...しかし、いくつかのチュートリアルを読んだ後でも、それを実装する方法がまったくわかりません...

だからここに私の現在の状況があります:

doInBackground メソッドで何かを行う SwingWorker があります。

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 からリスナーにアクセスすることはできますが、その逆はできません (ただし、機能させることはできるかもしれません)。

最後にもう 1 つ: Listener は SwingWorker によってのみ呼び出されるのではなく、SwingWorker をインスタンス化する必要さえない場合でも、他のソース (ユーザーなど) から呼び出すことができます。

4

1 に答える 1

2

CountDownLatch などの並行ライブラリのツールの 1 つを使用できます。

于 2013-02-14T03:35:40.250 に答える