2013-05-14 4 views
1

J'essaie juste d'appeler un thread en java. Je veux vérifier si le fil est interrompu ou non. Le thread est défini dans la classe "Scheduler". Voici le code:Threads en Java obtenant NullPointerException

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

     else 
     { 
     thread.interrupt(); 
     } 

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

S'il vous plaît fournir plus extrait de code. Il n'est pas évident où le champ 'thread' est défini, etc. – AlexR

+0

une pile complète de l'exception et plus de code sera utile. – happymeal

+2

Veuillez arrêter d'écrire '(booleanCondition! = True)'. Chaque fois que vous faites cela, un bébé chaton pleure. – MikeTheLiar

Répondre

0

est l'extrait de code d'exécution() de votre planificateur? Dans la course pourquoi avez-vous thread.isInterrupted()? au lieu d'utiliser

Thread.currentThread().isInterrupted() 

serait également bon de voir le constructeur et où la variable de fil est déclaré

+1

merci, c'était la raison – dogano

1

La raison pour laquelle vous obtenez le NullPointerException est probablement parce que cette variable n'est pas initialisé, en raison de flag étant faux dans la déclaration if, mais je ne pense pas que ce soit la racine du problème ici.

Si vous voulez vérifier si le fil est appelé interrompue, vous devez utiliser

while (!this.isInterrupted()) { 

Dans votre extrait il semble que vous testez un autre objet Scheduler à la place.

1

Tout d'abord, étant donné que le drapeau est un booléen, vous pouvez simplement écrire:

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

else 
    { 
     thread.interrupt(); 
    } 

Je crois que votre question est que le drapeau est évaluée à faux, et vous finissez par appeler isInterrupted() sur un objet nul. Il est également tout à fait possible que vous vous référez à un fil totalement différent de ce que vous pensez être. On ne sait pas de quel objet vous parlez - vous devez poster plus de code.

aussi:

while (!thread.isInterrupted()) // isInterrupted() returns a boolean, you don't need != true 
    { 
      //.... 
    } 
+0

Si flag est 'false' NPE est attendu lors de l'appel' thread.interrupt(); '. De plus, dans ce cas, le thread n'est pas créé et donc sa méthode 'run()' n'est pas exécutée. – AlexR

+0

Ouais, j'étais vraiment confus à propos de ça aussi. Mon hypothèse était qu'il n'a pas encore testé cette partie du code ou quelque part dans le code que nous n'avons pas quelque chose dans le genre de 'if (! Flag)' initialise le thread. –