使用 GObject 方法时从 Hashtable 获取 NullPointerException

发布于 2024-10-29 08:25:06 字数 831 浏览 1 评论 0 原文

所以我尝试创建一个小型僵尸射击游戏。我使用 ACM 包 (jtf.acm.org) 中的 GTurtle 类。我有一个 GTurtle 的附加线程,它是一个 GObject。我有一个带有 while 循环的 run 方法,即检查 boolean 是否为 true,如果是,则执行 this.forward() 方法。

我尝试运行游戏并按下按钮,如果是 W 或 D,GTurtle 对象中的布尔值会发生变化,并且线程执行操作。然后我得到这个异常:

java.lang.NullPointerException
         at java.util.Hashtable.put(Hashtable.java:394)
         at acm.util.JTFTools.pause(JTFTools.java)
         at acm.util.Animator.delay(Animator.java)
         at acm.graphics.GTurtle.setLocation(GTurtle.java)
         at acm.graphics.GObject.move(GObject.java)
         at acm.graphics.GTurtle.move(GTurtle.java)
         at acm.graphics.GObject.movePolar(GObject.java)
         at acm.graphics.GTurtle.forward(GTurtle.java)
         at anotherTryJava.Player.run(Player.java:20)
         at java.lang.Thread.run(Thread.java:662)

So I try to create a small Zombie-Shooter game. I use a GTurtle class from ACM package (jtf.acm.org). I have additional thread for a GTurtle, which is a GObject. I have a run method with while loop, that is checking if boolean is true, if it is - this.forward() method gets executed.

I tried running game and pressing button, if it is W or D, boolean in GTurtle object gets changed and Thread executes action. Then I get this exception:

java.lang.NullPointerException
         at java.util.Hashtable.put(Hashtable.java:394)
         at acm.util.JTFTools.pause(JTFTools.java)
         at acm.util.Animator.delay(Animator.java)
         at acm.graphics.GTurtle.setLocation(GTurtle.java)
         at acm.graphics.GObject.move(GObject.java)
         at acm.graphics.GTurtle.move(GTurtle.java)
         at acm.graphics.GObject.movePolar(GObject.java)
         at acm.graphics.GTurtle.forward(GTurtle.java)
         at anotherTryJava.Player.run(Player.java:20)
         at java.lang.Thread.run(Thread.java:662)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

半岛未凉 2024-11-05 08:25:06

通过源代码来判断 hashtable.put 您传递了参数 null value 参数with 参数> null 或两个 null

来自 Javadoc

投掷:

        NullPoInterException - 如果键或值是 null

注意:我不知道您正在使用的JDK的版本(以下链接下面没有与您的版本匹配的行394 ),尽管推理仍然有效!

http://wwwww.docjar.com/html/api/api/java /util/hashtable.java.html

public synchronized V put(K key, V value) {
    if (key != null && value != null) {
        [...]
        return result;
    }
    throw new NullPointerException();
}

Hashtable a = ...;
a.put(null, "s"); // NullPointerException
a.put("s", null); // NullPointerException

Judging by the source code for Hashtable.put you either passed key parameter with null or value parameter with null or both null.

From Javadoc.

Throws:

        NullPointerException - if the key or value is null

Note: I do not know the version of the JDK you are using (link below does not have a line 394 matching with your version), although the reasoning remains valid!

http://www.docjar.com/html/api/java/util/Hashtable.java.html

public synchronized V put(K key, V value) {
    if (key != null && value != null) {
        [...]
        return result;
    }
    throw new NullPointerException();
}

Hashtable a = ...;
a.put(null, "s"); // NullPointerException
a.put("s", null); // NullPointerException
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文