1

次のようなスレッドがある場合:

Thread t = new Thread(myThread);
t.start();

private static Runnable myThread = new Runnable() {
    public void run() {
        try{
            String line=null;
            while ((line = eStream.readLine()) != null){
                //do something
            }
         }
         catch (Exception e){}
    }
};  

while ループで何が起こるかreadLine()というと、外部プロセスからの入力を期待しているため、ハングすることがあります。その場合、私がやろうとしているのは、タイマーをセットアップすることですinterrupt this thread tt.interrupt();

try ブロックの後にキャッチしようとするInterruptedExceptionと、コンパイル時エラーが発生します。このシナリオで誰かに教えてもらえますか? 割り込み例外をキャッチするにはどうすればよいですか?

ありがとうございました

4

2 に答える 2

2

割り込みは、ブロックしている readLine() 呼び出しを解放しません。これを行うには、ストリームを閉じる必要があります。

この行ですでに InterruptedException をキャッチしています(そしてそれを無視しています)

catch (Exception e){}

これはうまくいきません

line = eStream.readLine().toString()

ファイルの終わりに到達すると NullPointerException がスローされるためです。を取り外します.toString()

于 2012-01-12T15:39:10.440 に答える
2

InterruptedExceptionのドキュメントから:

スレッドが待機中、スリープ中、またはその他の方法で長時間一時停止しているときにスローされ、別のスレッドがクラス Thread の割り込みメソッドを使用してスレッドに割り込みます。

あなたが興味を持っているのはInterruptedIOExceptionだと思います:

I/O 操作が中断されたことを通知します。InterruptedIOException は、実行中のスレッドが中断されたために入力または出力転送が終了したことを示すためにスローされます。

私はこの JavaSpecialists ニュースレターをチェックして、スレッドをきれいにシャットダウンし、特にサブセクション「IO でブロックされたスレッドについて」を確認します。これは、この領域を詳細にカバーしています。

于 2012-01-12T15:39:44.693 に答える