我有一个小型图像处理应用程序,它使用 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();
}
});
}
}