0

我现在正在使用 swing 并且遇到了一些问题,我意识到不可能从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 回答