0

私は今スイングで作業していますが、少し問題が発生しました。http://docs.oracle.com/javase/tutorial/から SwingWorker スレッドを複数回実行することはできないことに気付きましたuiswing/concurrency/worker.html .

私の質問は、同じ SwingWorker スレッドの新しいインスタンスを作成することは可能ですか? ここのコードでは、ワーカー スレッドを「worker」と呼んでいます。

SwingWorker<Void, Void> worker = new SwingWorker<Void, Void>(){
  public void doInBackGround(){

  }
};

このスレッドのインスタンスを複数作成して、複数回呼び出すことはできますか? 私は次のようなものを試しました

(new SwingWorker<Void, Void> worker).execute();

しかし、これはうまくいかないようです。どんな助けでも大歓迎です!

4

1 に答える 1

2

必要なたびに新しい SwingWorker を作成することの問題は何ですか?

何度も実行する必要があるインスタンスに状態を保存する必要がある場合は、Runnable または Callable インターフェースを使用して、それを SwingWorker に渡して実行することができます。毎回 SwingWorker を作成する必要がありますが、Runnable または Callable インスタンスは同じにすることができます。

以下の例では、worker インスタンスは毎回作成されますが、Runnable インスタンスは常に同じです。

class Foo {
  private final Runnable executeInBackground;
  private final Runnable executeInDone;

  public Foo(Runnable done, Runnable background) {
     executeInDone = done;
     executeInBackground = background;
  }

  public void execute() {
     SwingWorker<Void, Void> worker = new SwingWorker<Void, Void>() {
        public void doInBackground() {
           executeInBackground.run();
        }

        public void done() {
           executeInDone.run();
        }
     };
     worker.execute();
  }
}
于 2013-04-18T13:01:57.953 に答える