我刚刚学会了执行swing后台任务,我开始尝试使用它,但是我在实现时遇到了一些麻烦。我的代码检索图像并返回一个结果(一个整数),指示图像检索是成功的结果= 0还是不成功的结果= -1。这是我的问题,我过早地检索结果。在done()方法中读取结果后,我可以在下面的代码中看到createImage方法中的语句。我想我认为在createImage完成之前,done方法不会执行。以下是我的代码:
new SwingWorker<int[], Void>() {
int result = -1;
@Override
protected int[] doInBackground() throws Exception {
// TODO Auto-generated method stub
return createImage(); //returns an integer array of size one indicating the result
}
protected void done() {
try {
result = get()[0]; //this result is being read before createImage is done
//executing. Why?
thisApplet.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
tree.setEnabled(true);
if (result == -1){
tree.setSelectionPath(null);
return;
}
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
}
}.execute();
答案 0 :(得分:2)
在doInBackground方法完成之前,done方法不会执行。所以这里肯定会有其他事情发生。我猜你可能会调用done和doInBackground而不是run()?如果没有,请尝试通过创建SSCCE来找到问题。