2011-12-28 10 views
0

なぜ私に説明してください次のコードはIllegalThreadStateExceptionをスローするのですか?なぜThread.interrupt()はIllegalThreadStateExceptionをスローするのですか?

try 
{ 
    if(thread1 != null) 
    { 
     if(thread1.isAlive()); 
     { 
      thread1.interrupt(); //it is ok 
      thread1.join(); 
     } 
    } 
    if(thread2 != null) 
    { 
     if(thread2.isAlive()); 
     { 
      thread2.interrupt(); //throw IllegalThreadStateException 
      thread2.join(); 
     } 
    } 
} 
catch(IllegalThreadStateException e) 
{ 
    System.exit(0); 
} 

文thread2.interrupt()を実行するとIllegalThreadStateExceptionがスローされました。しかし、thread1.interrupt()は正常です。

私に説明してください。

多くの感謝!

+0

例外メッセージとはなんですか? – SLaks

+0

e.toString()のメッセージは「java.lang.IllegalThreadStateException」のみです。 – Levanphong7887

+0

e.toString()はメッセージではありません。 'getMessage()'または 'printStackTrace()'をチェックしてください。 – SLaks

答えて

0

ライン:

if(thread2.isAlive()); // <-- Note this semicolon well! 

あなたはそれがコードセグメント:-)やっていると思う何をしていません。

if(thread2.isAlive()); 
{ 
    thread2.interrupt(); //throw IllegalThreadStateException 
    thread2.join(); 
} 

スレッドが生きているかどうかを確認して、もしそうなら、それを実行しますセミコロンの前に空のステートメント。その後、スレッドの状態が何であっても、中のinterrupt/joinシーケンスを中括弧内で実行します。

{ 
    doSomething(); 
} 

もそれに先立つifまたはwhileせずに、完全に有効なJavaの構築物である:からです。変更:

if(thread2.isAlive()); 

へ:

if(thread2.isAlive()) 

(と同様thread1チェックのために同じことを行います)。


そして、あなたもあれば、具体的な詳細を見つけるために例外にgetMessage()を呼び出す必要があります。

簡単な根本原因分析のための追加情報が含まれている場合があります。

+0

これは100%真ですが、役に立たないでしょう。 – SLaks

+0

@paxdiablo:OMG、私は:) :)、ありがとう! – Levanphong7887

+0

あなたのコメント@ Levanphong7887から、私たちが思ったような問題があったとすることができますか?あなたはあなたの古い答えに戻って、あなたの質問に最もよく答えるものを受け入れるべきです。あなたは、将来の質問に対して、そうしたやり方でより多くの回答を得るでしょう。 – paxdiablo

関連する問題