如何找到空指针异常的确切变量?

时间:2010-04-26 12:46:08

标签: java nullpointerexception

我现在已经在这一点了。 我有一个空指针异常,所以我猜测某些事情没有被初始化。

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 个答案:

答案 0 :(得分:7)

inbox1和/或messageRsetArraynull。您必须使用以下方法实例化它们:

inbox1 = new JTextField();

messageRsetArray = new String[size];

在这种情况下,只需检查该位置的哪些变量可能是null。如果你无法确定,那么拆分表达式,使每行只有一个“NPE-thrower”:

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

您将在下一个堆栈跟踪中获得明确的答案。

答案 1 :(得分:6)

  1. 设置调试器断点并打印出各种候选人的值。
  2. 制作一些局部变量,以便一次只能有一个空值。

答案 2 :(得分:6)

据我所知,你想要的东西不容易做到(任何“点”都是例外的候选者)。

略微重写源代码可能是获得所需内容的最简单方法。

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)。

答案 3 :(得分:0)

最快捷,最简单的方法:使用调试器。

总的来说:

  • 尽可能将所有内容设置为有用的默认值
  • ,尽量避免使用空值
  • 尽量避免链接方法调用和类似的属性访问