我有一個小圖像處理應用程序,它使用SwingWorker一次完成多件事情。但是,如果我運行以下代碼(過於簡化的摘錄),它只會掛在JDK 7 b70(窗口)上,但在6u16中運行。它會在另一個工作人員中啓動一個新工作人員並等待其結果(真實應用程序運行多個子工作人員並等待所有這些)。我是否在這裏使用了一些錯誤的模式(因爲大多數人在3-5人的迴轉工作者池中,我認爲它的限制是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();
}
});
}
}
您是否試圖獲得堆棧轉儲? – 2009-08-27 16:51:43
它似乎掛在sw2.get(),並且在jdk7中只有一個swingworker命名的線程。在jdk6上,我立刻看到了3-5。 – akarnokd 2009-08-27 16:53:21