Попробуйте сделать это:
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: Важно: «Если вы не пишете службу приложений или не знаете, чтово-первых, пожалуйста, не используйте этот класс "