2012-07-06 8 views
-1

Je reçois une exception de pointeur null, mais je ne sais pas pourquoi. J'ai vérifié pour voir si la cellule était nulle avant de la lire dans une chaîne. Alors, pourquoi cette chaîne est-elle nulle?Exception de pointeur nul

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

Il y a beaucoup d'endroits qui * pourrait * être jeter NullPointerException - ce la trace de la pile dit-elle? –

+0

Il trace l'exception à la ligne columnHeading = cell.toString(); – user1507835

+2

Ensuite, cela montre que 'cell' est nul ... ou qu'il est lancé dans' toString'. –

Répondre

0

Avant de cellule vous est nulle (ou) vide, vous faites String columnHeading = cell.toString(); qui pourrait être la cause du NullPointerException dans le cas où la cellule est nulle.

+0

Merci, j'ai essayé, et toujours obtenir l'exception. C'est tellement bizarre parce que je le faisais au hasard, et maintenant chaque fois que je le lance, j'ai cette exception, et rien n'a été changé. – user1507835

+0

... parce que * le faisait au hasard ... – user1507835

+3

mettre à jour la question avec stacktrace. – kosa

5

Je pense que c'est le problème:

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++; 
} 

Je suppose que vous voulez changer pour:

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++; 
}