выполнить SwingWorker несколько раз - PullRequest
9 голосов
/ 04 октября 2010

Я хочу иметь возможность использовать подкласс SwingWorker несколько раз.Это возможно?

Я прочитал в документе Java:

SwingWorker предназначен для выполнения только один раз.Выполнение SwingWorker более одного раза не приведет к вызову метода doInBackground дважды.

Ответы [ 3 ]

9 голосов
/ 04 октября 2010

Один экземпляр класса, реализующего SwingWorker, действительно может быть запущен только один раз. Нет никаких ограничений на создание и запуск нескольких экземпляров.

1 голос
/ 12 сентября 2013

Вы не можете создать столько экземпляров, сколько вам нужно, и выполнить их.В SwingWorker существует класс javax.swing.SwingWorker. MAX_WORKER_THREADS = 10. Таким образом, вы можете выполнить максимум 10 экземпляров.Экземпляр освобождается только он тратит 10 минут в простое.Не используйте экземпляр SwingWorker в качестве экземпляра потока, это не поток.

0 голосов
/ 10 ноября 2014

Попробуйте сделать это:

  private void startTask() {// main method that creates the background task or class that implements the SwingWorker

    AppContext  appContext = AppContext.getAppContext();
    if(appContext!=null){
        appContext.remove(SwingWorker.class); 
    } 
    MassiveMigrationTask task = new MassiveMigrationTask();// class that implements the SwingWorker
    task.execute();// this process implicitly adds the SwingWorker.class to the appContext
    }

Как описано: «AppContext - это таблица, на которую ссылается ThreadGroup, в которой хранятся экземпляры службы приложения.»

Таким образом, эта проблема возникает в основном потому, чтоAppContext сохраняет имя потока с именем SwingWorker ..., поэтому, если вы попытаетесь создать другой экземпляр потока, вы, вероятно, не добьетесь успеха, поскольку он оценивает это имя потока перед выполнением нового или, по крайней мере, помещает новое вкуча потоков, которые нужно выполнить, не стесняйтесь обращаться к коду здесь:

http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/sun/awt/AppContext.java

PS: Важно: «Если вы не пишете службу приложений или не знаете, чтово-первых, пожалуйста, не используйте этот класс "

...