2011-07-06 8 views
2

私はjava.util.concurrentパッケージを初めて使用し、DBからいくつかの行をフェッチする簡単なメソッドを書きました。私は自分のDBコールがそれを処理するための例外をスローすることを確認しました。しかし、私は例外が私に戻って伝播しているのを見ていない。代わりに私のメソッドへの呼び出しはnullを返しています。java concurrent将来のタスクで例外が発生して伝播しない場合はnullを返します

この場合、ある人が私を助けることができますか?ここで私のサンプルメソッド呼び出しです。

private FutureTask<List<ConditionFact>> getConditionFacts(final Member member) throws Exception { 
     FutureTask<List<ConditionFact>> task = new FutureTask<List<ConditionFact>>(new Callable<List<ConditionFact>>() { 
      public List<ConditionFact> call() throws Exception { 
       return saeFactDao.findConditionFactsByMember(member); 
      } 
     }); 
     taskExecutor.execute(task); 
     return task; 
    } 

私はグーグルで調べて、その周りにいくつかのページを見つけました。しかし、それに対する具体的な解決策は見当たらない。専門家....

を助けてくださいのTaskExecutorはFutureTaskは新しいスレッドで実行されると、例外が発生した場合、インスタンスに格納しますorg.springframework.core.task.TaskExecutor

+0

実行-コール周りのtry-catchを入れて:それはあなたがExecutionException内でラップされた例外を取得しますその実行結果を頼むよときにのみです。 –

答えて

7

の目的でありますフィールド。

FutureTask<List<ConditionFact>> task = getConditionFacts(member); 
// wait for the task to complete and get the result: 
try { 
    List<ConditionFact> conditionFacts = task.get(); 
} 
catch (ExecutionException e) { 
    // an exception occurred. 
    Throwable cause = e.getCause(); // cause is the original exception thrown by the DAO 
} 
+0

ありがとうございます。私はこれがうまくいくことを望みます。できるだけ早く結果を得るだろう – Shiv

+0

それは働いた。ありがとうございました – Shiv

関連する問題