0

我正在用 Commons Digester 解析一个 XML 文件,但我不明白我的代码有什么问题:我被这个 java.lang.NullPointerException 困住了。

这是代码: http: //pastie.org/1708374

这是例外: http: //pastie.org/1708371

我想这是一个愚蠢的错误

谢谢

4

2 回答 2

2

好吧,这就是问题所在:

if (centroids.length == 0)

据我所知,您永远不会分配值centroids,因此它将始终为空。然后,当您尝试在上面的行中取消引用它时,它会抛出NullPointerException.

下一行代码尝试使用的第一个代码centroids[0]表明您并不真正了解 Java 数组。也许你真的想要List一些描述?

我还强烈建议Map<String, String>您创建一个类型(例如 ),而不是始终具有相同的五个键的类型(例如Centroid),它具有属性标题、描述、标签、时间和事件。然后你可以做centroids一个List<Centroid>

List<Centroid> centroids = new ArrayList<Centroid>();

那么当你得到一些数据时......

Centroid centroid = new Centroid(...);
centroids.add(centroid);

哦,您目前还==用于比较字符串...不要那样做:使用equals,否则您将比较字符串引用

于 2011-03-24T14:46:59.530 回答
1

作为关于如何阅读 NPE 堆栈跟踪的一般说明:

当您获得异常堆栈跟踪时,请查看 Caused by 行及其后的第一行

Caused by: java.lang.NullPointerException
  at CentroidGenerator.nextItem2(CentroidGenerator.java:31)

当您尝试调用对象上的方法并且该对象为空时,最常发生空指针异常。上面的错误信息告诉你错误发生在 CentroidGenerator.java 的第 31 行:

if (centroids.length == 0) {

方法调用的格式为 object.method,因此您知道在此实例中为 null 的对象是质心。

确定什么是 null 的一种快速直观的方法是只查看发生异常的行上的点左侧的内容。在您有多个方法调用的行中,您不会立即知道什么对象是空的,您可能需要更多的探索,但在这种情况下不需要。

要解决此问题,请参阅 Jon 的回答。

于 2011-03-24T15:00:00.947 回答