簡體   English   中英

Java中的SwingWorker線程

[英]SwingWorker threads in Java

我現在正在使用swing,我遇到了一些問題,我意識到不可能從http://docs.oracle.com/javase/tutorial/多次執行SwingWorker線程。 uiswing / concurrency / worker.html

我的問題是,是否可以創建相同SwingWorker線程的新實例? 在這里的代碼我稱為工作線程'工人'

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

  }
};

是否可以創建此線程的多個實例,以便我可以多次調用它? 我嘗試過類似的東西

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

但這似乎不起作用。 任何幫助都會被貶低!

每次需要時創建一個新的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();
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM