SwingWorker を使用して一度に複数のことを行う小さな画像処理アプリケーションがあります。ただし、次のコード (簡略化された抜粋) を実行すると、JDK 7 b70 (Windows) ではハングしますが、6u16 では動作します。別のワーカー内で新しいワーカーを開始し、その結果を待ちます (実際のアプリは複数のサブワーカーを実行し、このようにずっと待機します)。ここで間違ったパターンを使用したのでしょうか (ほとんどの場合、swingworker-pool には 3 から 5 のワーカーがあり、10 の制限があると思います)。
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();
}
});
}
}