实现Java Swing worker的问题

时间:2011-02-09 13:23:04

标签: java swing swingworker

我刚刚学会了执行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();

1 个答案:

答案 0 :(得分:2)

在doInBackground方法完成之前,done方法不会执行。所以这里肯定会有其他事情发生。我猜你可能会调用done和doInBackground而不是run()?如果没有,请尝试通过创建SSCCE来找到问题。