1

Javaでスレッドを呼び出そうとしています。スレッドが中断されているかどうかを確認したい。スレッドはクラス "Scheduler" で定義されます。コードは次のとおりです。

        if (flag == true) 
        {
        thread = new Scheduler();
        thread.start();
        } 

        else 
        {
        thread.interrupt();
        }

        public void run() 
        {
            while (thread.isInterrupted() != true) // Here i get a NPE...
           { 
             //....
           }
        }
4

3 に答える 3

1

まず、フラグはブール値であるため、次のように簡単に記述できます。

  if (flag) 
    {
        thread = new Scheduler();
        thread.start();
    } 

 else 
    {
        thread.interrupt();
    }

あなたの問題は、フラグが false と評価され、最終的isInterrupted()に null オブジェクトを呼び出すことだと思います。また、自分が思っているものとはまったく異なるスレッドを参照している可能性も十分にあります。参照しているオブジェクトが明確ではありません。さらにコードを投稿する必要があります。

また:

while (!thread.isInterrupted()) // isInterrupted() returns a boolean, you don't need != true
   { 
             //....
   }
于 2013-05-14T12:45:01.983 に答える
1

を取得している理由は、ステートメントが false であるNullPointerExceptionため、おそらくその変数が初期化されていないためですが、それが問題の根本ではないと思います。 flagif

呼び出されたスレッドが中断されているかどうかを確認したい場合は、使用する必要があります

while (!this.isInterrupted()) {

Schedulerスニペットでは、代わりに別のオブジェクトをテストしているように見えます。

于 2013-05-14T12:42:57.790 に答える
0

スケジューラの run() コード スニペットですか? 実行中に、なぜ thread.isInterrupted() があるのですか? 代わりに使用

Thread.currentThread().isInterrupted()

また、コンストラクターと、スレッド変数が宣言されている場所を確認するとよいでしょう。

于 2013-05-14T13:05:37.587 に答える