2010-04-03 3 views
0

Интересно, может ли кто-нибудь помочь мне понять, где я могу ошибиться с этим кодом; В основном я работаю над учебником и называю класс ниже из другого класса - и он получает следующую ошибку;Нить не ведет себя правильно

Исключение в потоке "Thread-1" java.lang.NullPointerException в org.newdawn.spaceinvaders.TCPChat.run (TCPChat.java:322) в java.lang.Thread.run (Unknown Source)

Я понимаю, что ошибка помечена в другом классе, но я проверил другой класс с небольшим классом, который устанавливает отдельный поток - и он отлично работает, но как только я попытаюсь реализовать новый поток в этом классе - он вызывает всевозможные проблемы. Правильно ли настрою поток в этом классе?

В принципе, я могу настроить поток в этом классе, с тестовым циклом, и это нормально, но когда я привожу функциональность остальной части игры, он иногда зависает или вообще не отображается.

Любые предложения о том, где я могу ошибиться, были бы весьма полезны.

Спасибо, что посмотрели.

+3

621 строк кода? эй, что может быть актуальным? – miku

+0

Дайте код 'TCPChat' вместо того, что вы дали. – Bozho

+0

@ MYYN none на самом деле: D – Bozho

ответ

2

NullPointerException является наиболее распространенным исключением и его очень легко идентифицировать. Это происходит в ряде случаев (указано в связанном javadoc), но наиболее распространенным является вызов метода на объекте null. Например, если у вас есть:

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

Так перейти к строке кода, указанного StackTrace (TCPChat.java:322), и проверьте, есть ли null объект там, на котором вызываются методы. Если есть, убедитесь, что они не null, либо введите оператор if, который проверяет, if (obj != null), чтобы код не был выполнен.

Обновление: похоже connectButton является null. Вы должны позвонить initOptionsPane(), прежде чем вы вызовете начало потока.

+0

Я запустил чат-класс там, спасибо за совет, я посмотрю и посмотрю, смогу ли я увидеть, в чем проблема, 322. – ivor

+0

@ivor проверить мое обновление – Bozho

+0

Спасибо - я сейчас смотрю. – ivor

3

java.lang.NullPointerException в org.newdawn.spaceinvaders.TCPChat.run (TCPChat.java:322)

Открыть TCPChat.java исходный файл, заглянуть в строку 322 и осмотреться в этой конкретной линии где оператор точки . используется для доступа к некоторой ссылке на объект. Что-то вроде:

someObject.doSomething(); 

NullPointerException на этой линии означает, что someObject является null. Вы не можете получить или вызвать ничего. Чтобы решить такую ​​проблему, вам просто необходимо убедиться, что someObject является не нуль в тот момент:

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

Или, что вам нужно, чтобы пропустить весь вызов, когда он null:

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

Это имеет кстати ничего сделать с нитками.Это всего лишь ошибка программирования, как и с любыми другими RuntimeException.

+0

(+1). Это, по крайней мере, второй раз сегодня кто-то не понимает NPE .. Мне просто интересно, как трудно открыть javadoc. Я не могу вспомнить о проблемах с NPE, когда я начал программировать. – Bozho

+0

Спасибо за совет, Это очень полезно. – ivor

+0

@Bozho: у вас есть программисты и программисты. @ivor: добро пожаловать. – BalusC

1

Что касается названия этого вопроса: нить ведет себя правильно. Это ваш код в потоке, который не является;)

Смежные вопросы