Справка по NullPointerException Java - PullRequest
       8

Справка по NullPointerException Java

0 голосов
/ 20 апреля 2010

Последние несколько часов я рвал на себе волосы, пытаясь решить эту проблему. Каждый раз, когда я нажимаю на JButton, который должен открыть JFrame (и он открывается), я получаю трассировку стека, говорящую, что у меня есть исключение нулевой точки в этих битах кода:

В классе А у меня есть:

aButton.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        B instanceofB = new B(userSession.getBalance());
    }
});

и класс B

super.getSomeBtn().setVisible(false);

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

Действительно застрял здесь!

Ответы [ 3 ]

2 голосов
/ 20 апреля 2010

Если вы используете IDE, например eclipse, установите точку останова для исключения NullPointerException. Затем, когда вы отлаживаете, проверьте локальные переменные в этой точке, чтобы выяснить, что является нулем. Вероятно, из этого кода наиболее вероятно, что getSomeBtn () возвращает значение null, что означает, что ваш класс B не инициализирует его или вызывает неправильный конструктор суперкласса. Однако здесь действительно недостаточно подробностей / контекста, чтобы помочь. Если есть сомнения, выведите отладчик!

1 голос
/ 20 апреля 2010

Вот 3 точки интереса, где может произойти NPE:

  • super.getSomeBtn () может быть нулевым;
  • userSession может быть нулевым
  • некоторые коды инициализации класса B также могут выдавать это исключение, например, такой код

    Object _one = null; Object _two = _one.getClass ();

во время объявления поля вызовет NPE.

Посмотрите все эти три пункта, я думаю, вы найдете что-нибудь. Точки останова / log / asserts - все поможет.

0 голосов
/ 20 апреля 2010

Вы можете разбить эти операторы, чтобы проверить каждую ссылку по одному на нулевое значение. Для этого вы можете использовать операторы print / log или утверждения:

assert aButton != null;
aButton.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
      assert userSession != null;
      B instanceofB = new B(userSession.getBalance());

        });

...
assert super.getSomeBtn() != null;
super.getSomeBtn().setVisible(false);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...