Как вы находите точную переменную исключения нулевого указателя? - PullRequest
0 голосов
/ 26 апреля 2010

Я был здесь немного. У меня исключение нулевого указателя, поэтому я предполагаю, что кое-что не было инициализировано.

AdminMessages.inbox1.setText(messageRsetArray[0]);

Это мой код, на который он нацелен. Но я не могу найти то, что внутри. Не было инициализируется.

AdminMessages - это класс, который содержит JTextField с именем inbox1, messageRsetArray - это массив, который взял переменные из массива.

Также inbox1 является статическим. Я не мог заставить добытчиков и сеттеров работать. Я знаю, что это плохая практика.


Exception in thread "main" java.lang.NullPointerException
 at project.AdminMessages.fillInboxGui(AdminMessages.java:587)
 at project.AdminMessages.<init>(AdminMessages.java:156)
 at project.AdminUser.createAdminMessages(AdminUser.java:31)
 at project.AdminUser.<init>(AdminUser.java:17)
 at project.AdminUser.main(AdminUser.java:45)

Ответы [ 4 ]

7 голосов
/ 26 апреля 2010

inbox1 и / или messageRsetArray равны null. Вы должны создать их с помощью:

inbox1 = new JTextField();

и

messageRsetArray = new String[size];

В таких случаях просто проверьте, какая из переменных может быть null в этом месте. Если вы не можете точно сказать, то разбейте выражение так, чтобы в строке был только один «метатель NPE»:

String text = messageRsetArray[0];
AdminMessages.inbox1.setText(text);

И у вас будет окончательный ответ на следующей трассировке стека.

6 голосов
/ 26 апреля 2010

Насколько я знаю, то, что вы хотите, не может быть легко сделано (ЛЮБАЯ "точка" является кандидатом на исключение).

Небольшое переписывание исходного кода может быть самым простым способом получить то, чтовам нужно.

AdminMessages.inbox1.setText(messageRsetArray[0]);

в

inbox1 = Adminmessages.inbox1;
text = messageRSetArray[0];
inbox1.setText(text);

Это оставляет вам только одну «точечную» операцию на строку и делает очевидным, какая из них разбита.

Вы также можете помочь человеку увидеть трассировку стека с помощью

if (AdminMessages.inbox1 == null) {
   throw new IllegalArgumentException("AdminMessages.inbox1 == null");
}

(мне нравится это для аргументов метода. Когда внутри кода вы можете захотеть вместо NullPointerExceptions).

5 голосов
/ 26 апреля 2010
  1. установить точку останова отладчика и распечатать значения различных кандидатов.
  2. сделать несколько локальных переменных, чтобы только одна вещь могла быть нулевой за раз.
0 голосов
/ 26 апреля 2010

Самый быстрый и простой способ: использовать отладчик.

И вообще:

  • Старайтесь избегать нулевых значений, устанавливая все на полезные значения по умолчанию, если это возможно
  • Старайтесь избегать вызовов методов и подобных обращений к свойствам
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...