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

OVE*_*ONE 1 java nullpointerexception

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

AdminMessages.inbox1.setText(messageRsetArray[0]);
Run Code Online (Sandbox Code Playgroud)

这是我的代码所针对的代码.但我找不到里面的东西.它尚未初始化.

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)
Run Code Online (Sandbox Code Playgroud)

Boz*_*zho 7

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

inbox1 = new JTextField();
Run Code Online (Sandbox Code Playgroud)

messageRsetArray = new String[size];
Run Code Online (Sandbox Code Playgroud)

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

String text = messageRsetArray[0];
AdminMessages.inbox1.setText(text);
Run Code Online (Sandbox Code Playgroud)

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


Tho*_*sen 6

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

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

AdminMessages.inbox1.setText(messageRsetArray[0]);
Run Code Online (Sandbox Code Playgroud)

inbox1 = Adminmessages.inbox1;
text = messageRSetArray[0];
inbox1.setText(text);
Run Code Online (Sandbox Code Playgroud)

这使得每行只有一个"点"操作,并且明显哪一个被打破.

您可能还想帮助此人查看堆栈跟踪

if (AdminMessages.inbox1 == null) {
   throw new IllegalArgumentException("AdminMessages.inbox1 == null");
}
Run Code Online (Sandbox Code Playgroud)

(我喜欢这个用于方法参数.当在代码内部时,您可能需要NullPointerExceptions).


bma*_*ies 5

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