2012-07-06 226 views
-1

我得到一个空指针异常,但我不知道为什么。我在查看字符串之前检查了单元格是否为空。那么,为什么这个字符串为空?空指针异常

private void fillArray() 
{ 
    try 
    { 
     readBook = new HSSFWorkbook(readFile); 
    } 
    catch (IOException e) 
    { 
     System.out.println("If we know what we're doing, no one should ever see this line."); 
    } 
    if (readBook != null) 
    {HSSFSheet infoSheet = readBook.getSheetAt(0); 
     HSSFRow headingsRow = infoSheet.getRow(0); 
     int i = 0; 
     HSSFCell cell = headingsRow.getCell(i); 
     String columnHeading = cell.toString(); 
     while (cell != null && !(cell.toString().equals(""))) 
     { 
      cell = headingsRow.getCell(i); 
      columnHeading = cell.toString(); 
      columnHeadings.add(columnHeading); 
      i++; 
     } 
     if(columnListIsSetup == false) 
     { 
      createList(); 
      columnListIsSetup = true; 
     } 
    } 
+7

有很多地方是*可能*扔NullPointerException异常 - 什么堆栈跟踪说? – 2012-07-06 21:10:37

+0

它追溯到行columnHeading = cell.toString(); – user1507835 2012-07-06 21:18:09

+2

然后显示'cell'为空......或者它在'toString'内被抛出。 – 2012-07-06 21:19:01

回答

0

之前确保电池为空(或)空,你正在做的String columnHeading = cell.toString();可能的情况下,将导致空指针异常,其中电池是空的。

+0

谢谢,我试过了,但仍然得到例外。它很奇怪,因为我是随机做的,现在每次运行它,我都会得到这个异常,而且没有任何改变。 – user1507835 2012-07-06 21:15:44

+0

...因为它*是随机做的... – user1507835 2012-07-06 21:16:26

+3

更新Stacktrace的问题。 – kosa 2012-07-06 21:16:52

5

,我认为这就是问题所在:

while (cell != null && !(cell.toString().equals(""))) 
{ 
    // We know that cell isn't null before this line... 
    cell = headingsRow.getCell(i); 

    // ... but now we've got a new value for cell, which could be null 
    columnHeading = cell.toString(); 
    columnHeadings.add(columnHeading); 
    i++; 
} 

你想改变它到我怀疑:

while (cell != null && !(cell.toString().equals(""))) 
{ 
    // We know cell isn't null for this... 
    columnHeading = cell.toString(); 
    columnHeadings.add(columnHeading); 

    i++; 
    // It's fine to set cell to null here... we'll be 
    // checking again in a second... 
    cell = headingsRow.getCell(i); 
} 
1
while (cell != null && !(cell.toString().equals(""))) { 
    cell = headingsRow.getCell(i);  // here, cell gets reassigned so the 
             // "cell != null" check in the while 
             // loop condition loses it's value, 
             // you need to check again 

    if (cell == null)  // add the following to make sure the NEW cell value is not null 
     break;    // 

    columnHeading = cell.toString(); 
    columnHeadings.add(columnHeading); 
    i++; 
}