使用“if”语句检查后的 NullPointer 异常

NullPointer Exception after checking with 'if' statement

提问人:Даниел Димитров 提问时间:4/11/2015 最后编辑:Даниел Димитров 更新时间:4/12/2015 访问量:125

问:

我有机器人连接到 IRC 服务器,并且它不会一直崩溃,机器人在机器人的线程“main”java.lang.NullPointerException 中崩溃并出现异常。Report.main(报告.java:47) 47 线是

if (!(str.split(" ")[1].equals("QUIT") || str.split(" ")[1].equals("PART") || str.split(" ")[1].equals("JOIN")))

编辑更多代码

String str = null;    
PrintWriter o;
            Socket s;
            BufferedReader i1;
            s = new Socket("", 6667);
            i1 = new BufferedReader(new InputStreamReader(s.getInputStream()));
            o = new PrintWriter(new OutputStreamWriter(s.getOutputStream()));
            o.print("PASS " + "" + "\r\n");
            o.print("USER " + "" + " 0 * :" + ""
                    + "\r\n" + "NICK " + "" + "\r\n");
            o.print("JOIN " + "#test" + "\r\n");
            o.flush();
    while (s.isConnected()) {
                str = i1.readLine();
                StringBuffer stringBuffer = null;
    if (!(str.split(" ")[1].equals("QUIT") || str.split(" ")[1].equals("PART") || str.split(" ")[1].equals("JOIN"))) {
    ......
爪哇岛

评论

5赞 JacksOnF1re 4/11/2015
str 为 null 或 split 中没有第二个元素
2赞 Oliver Charlesworth 4/11/2015
好吧,如果它是 null,那么你为什么对 null 指针异常感到惊讶呢?
2赞 Jonas Czech 4/11/2015
String str = null;这显然会给出一个nullPointerException,因为你正在尝试拆分一个为null的字符串。
3赞 Pshemo 4/11/2015
null没有方法(或任何方法或字段),因此在抛出 NPE 时调用它。此外,如果数据未更改,则不要多次调用相同的数据。调用一次,存储结果并在需要时使用它。splitnullsplit
1赞 Greg Kopff 4/11/2015
阅读 Javadoc 的 BufferedReader.readLine()

答:

1赞 Даниел Димитров 4/11/2015 #1

似乎解决了我的问题。if(str != null)

1赞 Saurabh Jhunjhunwala 4/11/2015 #2

作为一个好的做法,在请求它的任何属性/方法之前,你应该始终检查 null。

如果你可以重写你的 if 语句

if(str!=null && (!(str.split(“”)[1].equals(“退出”) ||str.split(“”)[1].equals(“部分”) ||str.split(“”)[1].equals(“加入”)))) ......