2013-05-14 4 views
1

자바에서 스레드를 호출하려하고있다. 스레드가 인터럽트되었는지 아닌지 확인하고 싶습니다. 스레드는 "스케줄러"클래스에서 정의됩니다. 여기에 코드입니다 : 그 변수가 if 문에서 거짓되고 인해 flag에, 초기화되지 않기 때문에자바에서 쓰레드가 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

큰 코드를 입력하십시오 선언 된 생성자를보고 좋은 것 또한

Thread.currentThread().isInterrupted() 

를 사용합니다. 필드'thread'가 어디에 정의되어 있는지는 명확하지 않습니다. – AlexR

+0

예외의 완전한 스택 추적과 더 많은 코드가 유용 할 것입니다. – happymeal

+2

'(booleanCondition! = true)'의 쓰지 마세요. 네가 그렇게 할 때마다 아기 새끼 고양이가 울다. – MikeTheLiar

답변

0

은 스케줄러에서 실행() 코드인가? 실행 중에 왜 thread.isInterrupted()가 있습니까? 대신 스레드 변수가

+1

감사합니다. 이유가 여기에 있습니다. – dogano

1

당신이 NullPointerException을 받고있는 이유는 아마도,하지만 나는이의 루트라고 생각하지 않습니다 여기 문제. 당신이 호출 스레드가 중단되어 있는지 확인하려면

, 당신은 당신이 아닌 다른 Scheduler 개체를 테스트하는 것 같습니다 당신의 조각에서

while (!this.isInterrupted()) { 

를 사용해야합니다. 플래그 부울이기 때문에

1

첫째, 당신은 간단하게 작성할 수 있습니다

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

else 
    { 
     thread.interrupt(); 
    } 

나는 문제가 플래그가 false로 평가이라고 생각, 당신은 null 객체에 isInterrupted()를 호출 결국. 또한 당신이 생각하는 것보다 완전히 다른 스레드를 말하는 것이 가능합니다. 어떤 객체를 참조하는지는 명확하지 않습니다. 더 많은 코드를 게시해야합니다. 또한

:

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

flag가'false' 인 경우'thread.interrupt();'를 호출 할 때 NPE가 필요합니다. 게다가이 경우 스레드는 생성되지 않기 때문에'run()'메서드는 실행되지 않습니다. – AlexR

+0

그래, 나도 그렇게 혼란스러워했다. 내 가정은 그가 아직 코드의 일부를 테스트하지 않았거나 우리가 가지고 있지 않은 코드 어딘가에서'if (! flag)'줄을 따라 스레드를 초기화한다는 것입니다. –

관련 문제