【问题标题】:Java Null Pointer ExceptionJava 空指针异常
【发布时间】:2011-01-17 04:57:20
【问题描述】:

我尝试将我在网上找到的一个类调整为一个动态整数数组,用于动态“实体”数组,但现在我得到一个“NullPointerException”。

引发异常的代码是:

public void initialize()
{
    buffer = new BufferedImage(800,600,BufferedImage.TYPE_INT_RGB);
    Entities.put(Entities.getCurrentPos()+1, new Entity(100, 100, Color.green));
    Entities.put(Entities.getCurrentPos()+1, new Entity(400, 400, Color.blue));
}

DynArrayEntities 类的相关部分:

...

private Entity[] data;  // An array to hold the data.
private int currentpos = 0;

...

public void put(int position, Entity value) {

    if (position >= data.length) {

        int newSize = 2 * data.length;
            if (position >= newSize)
                newSize = 2 * position;
        Entity[] newData = new Entity[newSize];
        System.arraycopy(data, 0, newData, 0, data.length);
        data = newData;
    }

    data[position] = value;
    currentpos++;

}

....

public int getCurrentPos() {
    return currentpos;
}

提前感谢您的帮助!

【问题讨论】:

  • 在 Java 中出现异常时,堆栈跟踪非常重要。它详细地告诉您调用历史记录,并指出导致此异常的第一行。在不知道调用以及代码中第一行跟踪点的位置的情况下,很难(如果不是不可能的话)仅基于不代表 SSCCE (sscce.org) 的剥离代码给出可靠的答案。因此,在将来,也发布堆栈跟踪。或者自己努力学习如何阅读/解释堆栈跟踪。
  • 看起来像是初学者的编程作业。大多数人只会使用 Java 的内置类。
  • 嘿。不知道有一个内置的 Java 类。 :D 恐怕我不擅长谷歌搜索......
  • 除了堆栈跟踪,我们还需要查看声明Entities的源代码。
  • 了解标准类的最佳方法(您需要这样做)是学习相关的 Sun 教程(或同等教程)并浏览 J2SE javadocs。

标签: java arrays exception nullpointerexception dynamic-arrays


【解决方案1】:
...

private Entity[] data= new Entity[0];  // Or some value > 0
...

否则数据在您第一次在方法中访问时为空。

【讨论】:

  • 这样的实现通常会包含一个带有“容量”参数的构造函数来确定数组的初始大小。请参阅 Java 的 ArrayList 类。
  • 是的,看来我没有正确初始化数组。谢谢!
【解决方案2】:

你在做

position >= data.length

在初始化data之前

【讨论】:

  • 是的,你和卡斯滕都发现了我的同一个错误。谢谢!
【解决方案3】:

(实体是一个字段吗?在这种情况下,您应该将其称为实体。请参阅http://java.sun.com/docs/codeconv/

你应该准确地指出 NPE 是在哪一行抛出的。如果它在 initialize() 方法的第二行,那么 Entities 字段可能为空。如果在 put() 方法中,那么可能是因为 data 字段为空。

【讨论】:

  • 抱歉,不清楚错误。感谢您的帮助!
【解决方案4】:

您这样做只是为了学习吗?如果没有,为什么不使用@987654321@,它为任何Object 提供一个动态数组?

【讨论】:

  • 我明白了!我想我会使用 Vector 来保存所有实体。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-28
相关资源
最近更新 更多