Java, Digester: застрял на этом исключении java.lang.NullPointerException - PullRequest
0 голосов
/ 24 марта 2011

Я анализирую XML-файл с помощью Commons Digester, и я не понимаю, что не так в моем коде: я застрял с этой java.lang.NullPointerException.

Это код: http://pastie.org/1708374

и это исключение: http://pastie.org/1708371

Полагаю, это глупая ошибка

спасибо

Ответы [ 2 ]

2 голосов
/ 24 марта 2011

Ну, это проблема:

if (centroids.length == 0)

Насколько я вижу, вы никогда не назначаете значение centroids, поэтому оно всегда будет нулевым. Затем, когда вы попытаетесь разыменовать его в строке выше, он выдаст NullPointerException.

Первое, что следующая строка кода пыталась использовать centroids[0], предполагает, что вы не совсем понимаете массивы Java. Возможно, вы действительно хотели List какого-то описания?

Я бы также настоятельно предположил, что вместо Map<String, String>, который всегда имеет одинаковые пять ключей, вы создаете тип (например, Centroid), который имеет свойства title, description, tags, time и событие. Тогда вы можете просто сделать centroids a List<Centroid>:

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

затем, когда вы получите некоторые данные ...

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

О, и вы также в настоящее время используете == для сравнения строк ... не делайте этого: используйте equals, иначе вы будете сравнивать строку ссылки .

1 голос
/ 24 марта 2011

Как общее примечание о том, как читать трассировку стека NPE:

Когда вы получаете трассировку стека исключений, посмотрите на строку «Причины по» и первую строку после нее

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

Исключение нулевого указателя чаще всего возникает, когда вы пытаетесь вызвать метод объекта, и этот объект является нулевым.Приведенное выше сообщение об ошибке говорит вам, что ошибка возникает в строке 31 файла CentroidGenerator.java:

if (centroids.length == 0) {

Вызов метода имеет формат object.method, поэтому вы знаете, что в этом случае объект, который имеет значение nullцентроиды.

Быстрый визуальный способ определить, что является нулевым, - просто посмотреть на то, что слева от точек на линии, где происходит исключение.В строках, где у вас есть несколько вызовов методов, вы не сразу знаете, какой объект имеет значение null, и вам может потребоваться дополнительное исследование, но не в этом случае.

Чтобы устранить проблему, обратитесь к ответу Джона.

...