【问题标题】:Getting NullPointerException from Hashtable while using GObject method使用 GObject 方法时从 Hashtable 获取 NullPointerException
【发布时间】:2011-04-04 21:08:04
【问题描述】:

所以我尝试创建一个小型 Zombie-Shooter 游戏。我使用 ACM 包 (jtf.acm.org) 中的 GTurtle 类。我有一个 GTurtle 的附加线程,它是一个 GObject。我有一个带有 while 循环的 run 方法,即检查 boolean 是否为真,如果是 - 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)

【问题讨论】:

    标签: java netbeans hashtable


    【解决方案1】:

    根据Hashtable.put 的源代码判断,您要么将key 参数与null 一起传递,要么将value 参数与null 一起传递,或者同时传递null

    来自Javadoc

    抛出:

          NullPointerException - 如果键或值是 null

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

    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
    

    【讨论】:

    • 有趣的是,您的报价与我的答案来源完全相同。
    • 我承认,只有 javadoc 引用部分 @BalusC 的无耻复制粘贴。对我有用的是,避免从 oracle 网站再次复制/修剪它。如果我能为你的工作+1,我会的!
    • 我通过改变游戏逻辑解决了这个问题。我为位置 X 和 Y 使用了变量,并创建了一个方法来执行一个步骤。感谢你的回答。我在 Hashtabels 上发现了一些新东西。
    猜你喜欢
    • 2016-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-13
    • 1970-01-01
    • 1970-01-01
    • 2020-02-20
    • 1970-01-01
    相关资源
    最近更新 更多