У меня есть небольшое приложение для обработки изображений, которое делает сразу несколько действий с помощью SwingWorker. Однако, если я запустил следующий код (упрощенная выдержка), он просто зависает на JDK 7 b70 (windows), но работает в 6u16. Он запускает нового работника внутри другого работника и ждет его результата (реальное приложение запускает несколько подчиненных и ждет все это). Использовал ли я некоторые неправильные шаблоны здесь (так как в основном есть работники в swingworker-пуле, у которого есть предел 10, я думаю)?JDK-7 Тупики SwingWorker?
import javax.swing.SwingUtilities;
import javax.swing.SwingWorker;
public class Swing {
static SwingWorker<String, Void> getWorker2() {
return new SwingWorker<String, Void>() {
@Override
protected String doInBackground() throws Exception {
return "Hello World";
}
};
}
static void runWorker() {
SwingWorker<String, Void> worker
= new SwingWorker<String, Void>() {
@Override
protected String doInBackground() throws Exception {
SwingWorker<String, Void> sw2 = getWorker2();
sw2.execute();
return sw2.get();
}
};
worker.execute();
try {
System.out.println(worker.get());
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
runWorker();
}
});
}
}
Вы пытались получить свалку? –
Кажется, он зависает на sw2.get(), и в jdk7 есть только один swingworker-named thread. На jdk6 я вижу 3-5 одновременно. – akarnokd