4

コード:

    outerMethod {
        @Override
        public void run() {
                innerMethod throws IOException
                }
    }

スレッドで実行されたメソッドは、チェックされた例外--IOExceptionをスローします。この例外をメインスレッドで処理する必要があります。好き:

outerMethod() throws IOException
   {
        @Override
        public void run() {
                innerMethod() throws IOException
                }
    }

これは可能ですか?いいえの場合、これを行うためのより良い方法は何でしょうか?

ありがとう。

4

4 に答える 4

5

FutureTaskhttp : //docs.oracle.com/javase/6/docs/api/java/util/concurrent/FutureTask.html#get%28%29を使用します。getメソッドは、別のスレッドで実行された可能性のあるタスクからの例外をカプセル化します。

ExecutionException:例外をスローして中止したタスクの結果を取得しようとしたときにスローされる例外。この例外は、Throwable.getCause()メソッドを使用して検査できます。

于 2012-06-27T07:10:52.860 に答える
3

スレッドは個別のプロセスであり、例外ルートを介して通信できないため、例外を他のスレッドに伝播することはできません。ただし、スレッド間通信を使用することはでき、例外が発生した場合は論理的に処理する必要があります。

于 2012-06-27T07:07:06.373 に答える
3

このAPIドキュメントから

スレッドがUncaughtExceptionHandlerを定義している場合は呼び出され、定義されている場合はスレッドグループのUncaughtExceptionHandlerが呼び出されます。それ以外の場合は、デフォルトのキャッチされていない例外ハンドラーに転送できます。

于 2012-06-27T07:36:45.480 に答える
0

runメソッド内で例外を処理する必要があります:

        @Override
        public void run() {
           try {
              innerMethod();
           } catch (Exception e) {
             //handle e
           }
于 2012-06-27T07:10:17.637 に答える