线程运行不正常

时间:2010-04-03 20:16:36

标签: java multithreading

我想知道是否有人可以帮我理解这段代码可能出错的地方;基本上我正在编写一个教程并从另一个类调用下面的类 - 它收到以下错误;

线程“Thread-1”中的异常java.lang.NullPointerException     在org.newdawn.spaceinvaders.TCPChat.run(TCPChat.java:322)     在java.lang.Thread.run(未知来源)

我意识到错误是在另一个类中标记的 - 但是我已经测试了另一个类,其中一个小类设置了一个单独的线程 - 它工作正常,但是一旦我尝试在这个中实现一个新线程class - 它会导致各种各样的问题。我在这个课程中正确设置了线程吗?

基本上我可以在这个类中设置一个线程,带有一个测试循环并且很好,但是当我引入游戏其余部分的功能时,它有时会挂起,或根本不显示。

非常感谢任何有关我可能出错的建议。

感谢您的光临。

3 个答案:

答案 0 :(得分:3)

  

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

打开TCPChat.java源文件,查看第322行,并在此特定行中查看,其中使用点运算符.来访问某些对象引用。类似的东西:

someObject.doSomething();

此行上的NullPointerException表示someObjectnull。您无法访问或调用 nothing 。要解决此类问题,您需要确保此时someObject 为空:

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

或者,您需要在null

时跳过整个调用
if (someObject != null) {
    someObject.doSomething();
}

顺便说一下没有与线程有关。这只是一个编程错误,与其他RuntimeException一样。

答案 1 :(得分: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),以便不执行代码。

更新:似乎connectButtonnull。在致电开始线程之前,您必须致电initOptionsPane()

答案 2 :(得分:1)

关于这个问题的标题:线程表现正常。这是你在线程中的代码不是;)