-2

我对我在这里做错了什么感到有点困惑。我有一个 for each 循环,它通过每个String[]循环List<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());
         }

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

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

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

谢谢

4

4 回答 4

3

最可能的解释datanull

           data.write(line[0], line[1], line[2]);
           ^^^^
于 2013-04-10T07:33:08.060 回答
0

NPE 在:

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

必须在data、或中line[0],使用按合同设计或断言来确保值在访问它们之前就在那里。line[1]line[2]

于 2013-04-10T07:40:53.337 回答
0

试试下面的代码

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

于 2013-04-10T07:42:16.887 回答
-1

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

于 2013-04-10T07:36:20.683 回答