2013-04-22 2 views
0

나는 복용하기 전에 헤드 요소를 확인하고 싶어하지만
java.lang.NullPointerException 엿,복용하기 전에 BlockingQueue head 요소를 확인하는 방법?

가, 어떤 아이디어를 자바 BlockingQueue를

BlockingQueue sharedQueue = new LinkedBlockingQueue() 

이 내 코드를 사용하여 제기? 요소가 발견되지

while(true){ 
    try { 
     if(!sharedQueue.isEmpty()){ 
      char ch = (char)sharedQueue.peek(); 
      if(Character.isDigit(ch)){ 
       digitTextField.setText(digitTextField.getText()+sharedQueue.take()); 
      } 
     } 
    } catch (InterruptedException ex) { 
     Logger.getLogger(Form.class.getName()).log(Level.SEVERE, null, ex); 
    } 
} 

답변

4

0으로 캐스팅했기 때문입니다. null을 허용하지 않는. 또한, sharedQueue.isEmpty() 다음에 peek이 나오지 않아야합니다. 이는 알려진 인종의 원인 인 "check-then-act"로 알려져 있습니다.

당신은 BlockingQueue<Character>sharedQueue 후 사용 정의해야

if ((Character c = sharedQueue.poll()) != null)

1

peek() 반환 null :

결과 :

: 큐의 선두, 또는 널 (null)이 큐가 하늘의 경우는

당신은 사용할 필요가
if(ch != null && Character.isDigit(ch)){