【问题标题】:Null Pointer Exception in array with items in it包含项目的数组中的空指针异常
【发布时间】:2013-04-10 07:29:39
【问题描述】:

我对我在这里做错了什么感到有点困惑。我有一个 for each 循环,它通过 List<String[]> 中的每个 String[],如下所示:

      try {
           List<String[]> lines;
           //Code that fills lines
           for (String[] line : lines){
               System.out.println(line[0] + " "  + line[1] + " " + line[2]);                       
               data.write(line[0], line[1], line[2]);
            }
            //More Code
         } catch (Exception e){ //TODO: DEBUG
            System.err.println(e.getMessage());
         }

我已验证行中的每个项目确实存在,但我仍然在data.write(line[0], line[1], line[2]); 行得到一个NullPointerException

我很困惑,因为System.err.println(e.getMessage()); 只是打印nullSystem.out.println(line[0] + " " + line[1] + " " + line[2]); 将打印正确的数据

例外是在那一行,所以我不认为它是write() 方法(如果我尝试进入它,调试器将无法写入)。

谢谢

【问题讨论】:

  • 你在哪里初始化data
  • 除非我们看到“填充行的代码”,否则我们无法帮助您,因为这就是问题所在。 (正如drawmore指出的那样,您初始化data的那个或位置。)
  • 填写lines的代码是什么样的?这很可能是问题所在。
  • e.printStackTrace();代替System.err.println(e.getMessage());
  • 显然不是。认为如果您在超类中启动,它会逐渐下降。尴尬……

标签: java arrays string nullpointerexception


【解决方案1】:

最可能的解释是datanull

           data.write(line[0], line[1], line[2]);
           ^^^^

【讨论】:

    【解决方案2】:

    NPE 在:

    data.write(line[0], line[1], line[2]);
    

    必须在dataline[0]line[1]line[2] 中,使用按合同设计或断言确保值在访问之前存在。

    【讨论】:

      【解决方案3】:

      试试下面的代码

      try {
         List<String[]> lines;
         //Code that fills lines
         for (String[] line : lines){
             boolean isWrite = true;
             for(int i=0; line != null && i < line.length;i++)
             {
                  if(line[i] == null){
                      isWrite = false;
                      break;
                   }
             }
             if(isWrite && data != null){
                  System.out.println(line[0] + " "  + line[1] + " " + line[2]);                                      
                  data.write(line[0], line[1], line[2]);
              }
          }
          //More Code
       } catch (Exception e){ //TODO: DEBUG
          System.err.println(e.getMessage());
       }
      

      以上代码根据您的代码检查所有可能的 null

      【讨论】:

        【解决方案4】:

        在一次迭代中数据为 null 或 line[i] 为 null。

        【讨论】:

          猜你喜欢
          • 2020-02-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-01-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多