Java,Digester:坚持这个java.lang.NullPointerException

时间:2011-03-24 14:44:33

标签: java apache-commons-digester

我正在使用Commons Digester解析XML文件,我不明白我的代码中有什么问题:我遇到了这个java.lang.NullPointerException。

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

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

我猜这是一个愚蠢的错误

感谢

2 个答案:

答案 0 :(得分:2)

嗯,这就是问题:

if (centroids.length == 0)

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

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

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

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

然后当你得到一些数据......

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

哦,你现在也在使用==来比较字符串...不要这样做:使用equals,否则你将比较字符串引用

答案 1 :(得分:1)

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

当您获得异常堆栈跟踪时,请查看“由行引起的”及其后的第一行

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

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

if (centroids.length == 0) {

方法调用的格式为object.method,所以你知道在这个例子中,null的对象是质心。

确定空值的快速直观方法是仅查看发生异常的行左侧点的内容。在您有多个方法调用的行中,您不会立即知道哪个对象为null,您可能需要更多探索,但不是在此实例中。

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