2011-02-09 11 views
1

スイングバックグラウンドタスクの実行について学習しましたが、これを試し始めましたが、実装に少し問題があります。私のコードはイメージを取得し、イメージ検索が成功したかどうかを示す結果(整数)を返します。結果は0または失敗した結果= -1です。ここに私の問題は、私はすぐに結果を取得しています。私は、結果がdone()メソッドで読み取られた後、以下のコードでcreateImageメソッド内のステートメントを実行することができます。私は、完了したメソッドは、createImageが完了するまで実行されないと思ったと思います。ここでは以下の私のコードは次のとおりです。Javaスイングワーカーを実装する際の問題

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(); 

答えて

2

doInBackgroundメソッドが完了するまで行われるメソッドが実行されません。だからここに何か他のものがなければならない。 run()の代わりにdoneとdoInBackgroundを呼び出すかもしれないと思いますか?そうでない場合は、SSCCEを作成して問題を見つけてください。

+0

はい。愚かなプログラミングエラー。私はそれを固定したときすべてが働いた。 – Elliott

関連する問題