2010-04-03 7 views
0

이 코드를 잘못 이해할 수있는 사람이 있는지 궁금합니다. 기본적으로 나는 튜토리얼에서 일하고 있으며 다른 클래스에서 아래 클래스를 호출하고있다. 그리고 다음과 같은 에러가 발생한다.스레드가 올바르게 동작하지 않음

예외 글 "스레드 1"java.lang.Thread.run에서 org.newdawn.spaceinvaders.TCPChat.run (TCPChat.java:322) 에서 java.lang.NullPointerException이 (알 소스)

다른 클래스에서 오류가 발생했다는 것을 알았지 만 별도의 스레드를 설정하는 작은 클래스로 다른 클래스를 테스트했습니다. 제대로 작동하지만이 클래스에서 새 스레드를 구현하자마자 - 그것은 모든 종류의 문제를 일으 킵니다. 이 클래스에서 스레드를 올바르게 설정하고 있습니까?

기본적으로 테스트 루프를 사용하여이 클래스의 스레드를 설정할 수 있습니다.하지만 나머지 게임의 기능을 가져 오면 때로 중지되거나 전혀 표시되지 않습니다.

어디서 잘못 될 수 있는지에 대한 제안은 크게 감사하겠습니다.

감사합니다.

+3

621 줄의 코드? 이봐, 무슨 관련이있을 수 있니? – miku

+0

당신이 준 것 대신에'TCPChat'의 코드를 제공하십시오. – Bozho

+0

@ 실제로 MYYN 없음 : D – Bozho

답변

2

NullPointerException은 매우 예외적이며 쉽게 식별 할 수 있습니다. 많은 경우 (링크 된 javadoc에 열거 됨)에 발생하지만, 가장 공통적 인 것은 null 객체에서 메소드를 호출하는 것입니다. 예를 들어, 당신은있는 경우 :

String str = null; 
str.substring(2,4); // str is null and NullPointerException is thrown 

그래서 스택 트레이스 (TCPChat.java:322)로 표시 코드의 라인으로 이동하고, null 객체가 메서드가 호출되는 존재가 있는지 확인합니다. 있을 경우 null이 아니거나 if (obj != null)인지 확인하여 if 문을 작성하여 코드가 실행되지 않도록하십시오.

업데이트 :connectButtonnull입니다. 스레드를 시작하기 전에 initOptionsPane()에 전화해야합니다. org.newdawn.spaceinvaders.TCPChat.run (TCPChat.java:322)에서

+0

채팅 클래스를 거기에 붙였습니다. 조언을 주셔서 감사합니다. 문제가 무엇인지 알 수 있는지 살펴 보겠습니다. – ivor

+0

@ivor 내 업데이트 확인 – Bozho

+0

감사합니다. – ivor

3

java.lang.NullPointerException이

TCPChat.java 오픈 소스 파일 (322) 라인이 특정 라인 주위 들여다 보는 도트 연산자 .은 일부 객체 참조에 액세스하는 데 사용되었습니다. 같은 뭔가 :이 라인에

someObject.doSomething(); 

NullPointerExceptionsomeObjectnull 있음을 의미합니다. 에 액세스하거나 호출 할 수 없습니다..

if (someObject != null) { 
    someObject.doSomething(); 
} 

: 당신이 null 때 전체 호출을 건너 뛸 필요가

if (someObject == null) { 
    someObject = new SomeObject(); 
} 
someObject.doSomething(); 

또는 : 이러한 문제를 해결하기 위해, 당신은 단지 someObject 그 순간에 하지 널 있는지 확인해야합니다 이것은 방법에 의해 아무것도 스레드와 함께 할가 있습니다.다른 프로그래밍 코드와 마찬가지로 프로그래밍 오류 일뿐입니다. RuntimeException.

+0

(+1) 적어도 두 번째 시간은 오늘 누군가가 NPE를 이해하지 못한다. 나는 javadoc을 여는 것이 얼마나 어려운지 궁금해. 프로그래밍을 시작할 때 NPE에 문제가있는 것을 기억할 수 없습니다. – Bozho

+0

조언을 주셔서 감사합니다. 매우 도움이됩니다. – ivor

+0

@Bozho : 프로그래머와 프로그래머가 있습니다. @ivor : 천만에요. – BalusC

1

이 질문의 제목과 관련하여 스레드가 올바르게 작동하고 있습니다. 스레드의 코드가 아닙니다.)

관련 문제