Java - 字符串数组上的空指针异常

Java - Null Pointer Exception on String array

这是我正在处理的代码。它在一个方法中,其想法是打开一个文件并检查内容,或缺少内容,并报告回来。

但是我在下面指向的行上得到了 NullPointerException

我不知道如何解决这个问题。我试过调试,显示当时该行是 运行 String[] 的第一个元素包含文本,所以这不是问题。

int i = 0;
int numChar=1, numLines;
String[] line = new String[1000];

try {
    BufferedReader in = new BufferedReader(new FileReader(file));
    try {
        while(numChar > 0) {
            //String[] line = new String[1000];
            line[i] = in.readLine();
PROBLEM-->  numChar = line[1].length();
            i++;
        }            
    } catch (EOFException ex) {
        JOptionPane.showMessageDialog( null, "Error" );
        //break;
    }      
}
catch(IOException e) {
    JOptionPane.showMessageDialog( null, "Missing file or no data to read." );
    System.out.println("IO Error - Missing file");
}   

我怀疑您只需要更改数组访问索引以使用 i 而不是 1

numChar = line[i].length();

您还应该检查 null,因为 BufferedReader 将 return (from the docs):

null if the end of the stream has been reached

numChar = line[i] == null ? 0 : line[i].length;

您可能想要扩展它以便跳出循环而不是分配 null 长度。

String s = in.readLine();
if (s == null) {
  break;
}
else {
  line[i] = s;
  numChar = line[i++].length();
}

编辑 回应评论。

冒着混淆问题的风险,我倾向于重写你的循环。你似乎不需要 numChars 循环外,所以我会删除它以减少你的方法范围的变量。我还怀疑您不想在流的末尾停止阅读空行:

while (true) { // for(;;) if you prefer
    String s = in.readLine();
    //if (s == null || s.length() == 0) break; // stop on empty lines and end of stream
    if (s == null) break; // stop at end of stream only
    line[i++] = s;
}