Исключение нулевого указателя в переменной класса

У меня странная ошибка, я использую создаваемую мной переменную, но затем выхожу ошибку исключения нулевого указателя. Вот мой код:

public class ReadXMLFile {
// Initialize logger
private static Logger log = Logger.getLogger(ReadXMLFile.class);

public Document getXMLDocument() {
    Document doc = null;

    File configXmlFile = new File("");
    try {           
        DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory
                .newInstance();
        DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();

        System.out.println(LanguageHandler.source); //null

        configXmlFile = LanguageHandler.source;

        System.out.println(LanguageHandler.source); //null
        System.out.println("conf : " + configXmlFile.isFile()); //Null pointer exception

        doc = docBuilder.parse(configXmlFile);  

    } catch (Exception e) {
        e.printStackTrace();
        log.error(e.getMessage(), e);
    }

    return doc;
}

}

И вот ошибка:

java.lang.NullPointerException
at in.raster.oviyam.util.ReadXMLFile.getXMLDocument(ReadXMLFile.java:85)
at in.raster.oviyam.util.ReadXMLFile.getElementValues(ReadXMLFile.java:99)
at in.raster.oviyam.servlet.DicomNodes.doGet(DicomNodes.java:90)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:635)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

Строка 85 класса ReadXMLFile - это мой System.out.println("conf : " + configXmlFile.isFile());

Я не понимаю, почему у меня эта ошибка, она должна просто вернуть false.

Заранее спасибо за помощь !!

В.

null pointer exception означает, что вы пытаетесь получить доступ к тому, чего не существует. Скорее всего, это означает, что configXmlFile не был создан / создан должным образом. Сначала проверьте это.

Howard P 29.08.2018 17:29

Если configXmlFile - это null, как вы предложили в выводе программы, как вы ожидаете, что ваша программа пропустит NullPointerException?

tmarwen 29.08.2018 17:31
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
517
3

Ответы 3

Вы не можете вызывать методы для значения NULL.

Вы устанавливаете это

File configXmlFile = new File("");

А затем переназначьте значение

configXmlFile = LanguageHandler.source;

Вы уже подтвердили, что значение LanguageHandler.source равно нулю, поэтому значение configXmlFile теперь также равно нулю.

Если вы ожидаете наличие действительного объекта, возобновите поиск проблемы в LanguageHandler.source.

Согласно вашему коду и комментариям System.out.println(LanguageHandler.source); //null , что означает, что LanguageHandler.source на самом деле является null. Когда вы затем назначаете это значение в configXmlFile = LanguageHandler.source;, ваше свойство configXmlFile также имеет значение null. И когда вы вызываете метод по ссылке null, вы получаете NPE. Поэтому вам нужно проверить свой код, чтобы правильно инициализировать переменную LanguageHandler.source.

Вы вызываете метод объекта isFile () для объекта, который имеет значение NULL.

Вы назначаете

configXmlFile = LanguageHandler.source;

А в предыдущей строке вы видите, что вывод

System.out.println(LanguageHandler.source);

нулевой. Итак, configXmlFile также имеет значение null, поскольку вы присвоили ему ссылку на LanguageHandler.source. Поэтому configXmlFile.isFile () приводит к исключению NullPointerException.

Другие вопросы по теме