【问题标题】:Java: BufferedReader and NullPointerExceptionJava:BufferedReader 和 NullPointerException
【发布时间】:2012-09-20 17:33:14
【问题描述】:

我的代码按预期工作,当我输入此if 语句时出现问题:

if (sList.get(i).equals(null)){break;}

程序崩溃并显示以下调试信息 (NullPointerException):

java.lang.NullPointerException 在 HangmanLexicon.(HangmanLexicon.java:51) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) 在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) 在 java.lang.reflect.Constructor.newInstance(Constructor.java:513) 在 java.lang.Class.newInstance0(Class.java:355) 在 java.lang.Class.newInstance(Class.java:308) 在 sun.applet.AppletPanel.createApplet(AppletPanel.java:807) 在 sun.applet.AppletPanel.runLoader(AppletPanel.java:714) 在 sun.applet.AppletPanel.run(AppletPanel.java:368) 在 java.lang.Thread.run(Thread.java:680)

这是所有代码(是的,我知道它很乱,学习新东西时看起来就是这样):

public HangmanLexicon() 
{
/* 1. Open the data file HangmanLexicon.txt using a 
 * BufferedReader that will allow you to read it line by line. */
String readWord = "";


 try
 {
 BufferedReader rd = new BufferedReader (new FileReader ("ShorterLexicon.txt"));

    while (true)
    {
        readWord = rd.readLine();
        println(readWord);
        sList.add(readWord);
        if (readWord == null){
            println("Shit has hit the fan.");
            break;}
    }
    rd.close();
 }
 catch (IOException ex)
 {
     println ("Shit has hit the fan.");
     throw new ErrorException(ex);
 }

 println("readWord: "+ readWord);
/* 2. Read the lines from the file into an ArrayList. */
 for (int i = 0; i < sList.size(); i++)
    {
        if (sList.get(i).equals (null)){println("done.");}
        println("get: "+sList.get(i) + " pos: " + i);
    }

}

【问题讨论】:

    标签: java nullpointerexception bufferedreader


    【解决方案1】:

    不要以这种方式测试null,而是使用:

    if (sList.get(i) == null)
    

    你对equals的使用有一个问题,如果get的结果是null,那么NullPointerException自然会出现:因为你不能在null上调用方法。

    【讨论】:

      【解决方案2】:

      似乎sList.get(i)null 并且您正在对null 调用equals() 操作,结果是NullPointerException

      使用

      if (sList.get(i)== null)
      

      而不是

      if (sList.get(i).equals (null))
      

      【讨论】:

        【解决方案3】:

        当你的数组中有null值时,你不能调用equal函数,只需与null比较

        if(sList.get(i) == null){
            println("done.");
        }else{
            println("get: "+sList.get(i) + " pos: " + i);
        }
        

        我建议你在while循环中使用BufferedReader类的函数ready

        while(rd.ready()){
           // read 
        } 
        

        ready()

        【讨论】:

          【解决方案4】:

          bufferedReader 将 String 的值存储为“null”,如果 br.readLine() 为空,则不为 null

          所以试试看

          (!Stringval.equalisIgnoreCase("null"))
          

          而不是

          (Stringval != null) or (Stringval.equalsIgnoreCase(null))
          

          【讨论】:

            猜你喜欢
            • 2016-12-18
            • 1970-01-01
            • 2010-12-22
            • 2016-01-08
            • 2011-02-16
            • 2015-05-16
            • 1970-01-01
            • 2021-10-17
            • 2014-04-15
            相关资源
            最近更新 更多