我正在用 Commons Digester 解析一个 XML 文件,但我不明白我的代码有什么问题:我被这个 java.lang.NullPointerException 困住了。
这是代码: http: //pastie.org/1708374
这是例外: http: //pastie.org/1708371
我想这是一个愚蠢的错误
谢谢
我正在用 Commons Digester 解析一个 XML 文件,但我不明白我的代码有什么问题:我被这个 java.lang.NullPointerException 困住了。
这是代码: http: //pastie.org/1708374
这是例外: http: //pastie.org/1708371
我想这是一个愚蠢的错误
谢谢
好吧,这就是问题所在:
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
,否则您将比较字符串引用。
作为关于如何阅读 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 的回答。