Трассировка стека показывает исключение в неправильной позиции - PullRequest
2 голосов
/ 13 мая 2011

Я имею дело с исключением нулевого указателя, для которого у меня есть трассировка стека. В моих файлах журнала трассировки стека предоставляют номера строк. Кажется, что номера строк в трассировке стека исключений неверны Это новый для меня проект.

Когда я смотрю на исходный код в указанных строках, иногда отсутствует код (пустая строка) или конечная фигурная скобка (}), поэтому я не могу найти причину NullPointerException .

java.lang.NullPointerException в
com.test.AddProductServlet.list (AddProductServlet.java:776)
на
com.test.AddProductServlet.list (AddProductServlet.java:436)
в
com.test.AddProductServlet.routeAction (AddProductServlet.java:263)
при
com.test.AddProductServlet.onService (AddProductServlet.java:145)
при
com.test.MqServlet.service (MqServlet.java:500)
при
javax.servlet.http.HttpServlet.service (HttpServlet.java:803)

Я вставил точки останова перед строками из трассировки стека (т.е. 770, 430 и 260) и все еще не могу найти причину исключения.

Я использую Eclipse Helios с Java 1.6.0_16. Это проблема Затмения? Если да, какие изменения требуются?

Я повторно развернул проект, но проблема все еще та же.

Что мне делать дальше? Как я могу решить эту проблему?

1 Ответ

3 голосов
/ 13 мая 2011

Я использую гелий-затмения, Java 1.6.0_16. Это проблема затмения?

Нет. JVM создает трассировки стека, а не Eclipse. (Полагаю, теоретически возможно, что компилятор Java Eclipse может вставлять неправильные номера строк в файлы .class ... но сотни тысяч разработчиков Java уже заметили бы ...)

Я перераспределил проект, все та же проблема что делать дальше ? Как решить эту проблему?

Как говорит @Mike "Исходный код, который вы просматриваете, не является исходным кодом, который использовался для создания скомпилированного кода, который выдает ошибку."

Следовательно, это проблема сборки, развертывания или настройки:

  1. В Eclipse выполните обновление F5, очистите и соберите проект, затем повторно разверните и посмотрите, исправляет ли это номера строк.

  2. Вручную завершите работу сервера, удалите развернутый файл WAR и расширенный каталог, повторно разверните файл WAR и перезапустите сервер.

  3. Поиск в развернутом веб-приложении, включая все файлы JAR, чтобы найти все копии AddProductServlet.class.

    • Если их больше одного, выясните почему.

    • Если есть только один, убедитесь, что он идентичен тому, который вы только что построили, а если нет, выясните почему.

  4. Используйте Ant или любой другой для создания кода вне Eclipse, а затем разверните его. (Это исключит любую вероятность того, что это ошибка «Затмения» ...)

...