Исключение нулевого указателя при попытке доступа к методу (Java)

Я разрабатываю код на Java, но столкнулся с проблемой NPE. Это происходит, когда я пытаюсь использовать метод в другом классе. Вот мой код:

public class MyClass{

    private Attributes attr = null;

public static void main(String [ ] args) throws ParseException, SAXException, IOException, ParserConfigurationException {
         MyClass main = new MyClass();
         Options options = main.parseCommandLine();

        CommandLineParser parser = new BasicParser();
        CommandLine cl = parser.parse(options, args);
        main.configureAttributes(main);
    }

private void configureAttributes(MyClass main, CommandLine cl) throws ParserConfigurationException, SAXException, IOException {         
        String[] attributes = cl.getOptionValues("a");
        Integer tag = null;

        for(int i = 0; i < attributes.length ; i++) {
            String[] parts = attributes[i].split(" = ");
            String tagName = parts[0];
            String value = parts[1]; 
            tag = Integer.parseInt(tagName,16);                             
            this.attr.setString(tag, DICT.vrOf(tag), value);
        }
    }           
}   

Но я получаю NPE в последней строке: this.attr.setString (tag, DICT.vrOf (tag), value);

У меня импорт правильный. Это проект Maven, поэтому я также добавил зависимость в свой pom.xml.

Большое спасибо за вашу помощь !

В.

вы не можете вызвать метод с нулевым значением, а this.attr имеет значение NULL. вы должны инициализировать его перед вызовом setString

hotfix 27.08.2018 13:35

Я, конечно, глупый! Спасибо за исправление ответа!

Vaclav 27.08.2018 13:38
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
2
63
2

Ответы 2

Похоже, вы забыли инициализировать поле attr. Согласно вашему источнику, здесь только одно присвоение этому полю: private Attributes attr = null;. Итак, я думаю, вам нужно инициализировать свое поле где-нибудь в вашем коде.

А где вы инициализируете Attributes attr?

Вам нужно что-то вроде Attributes attr = new Attributes();, потому что вы точно знаете, что ваша переменная ничего не содержит - null

Вопрос - это не ответ!

hotfix 27.08.2018 13:37

@hotfix - на самом деле вопрос указывает на проблему: забыть инициализировать переменную attr.

rsp 27.08.2018 13:47

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