Input/Output NullPointerException, aber wieso? [Apache POI]

fabipfolix

Mitglied
Ich versuche hier die 4. und 5. Cell einer Row der Apache POI auszulesen, allerdings bekomme ich immer eine NullPointerException:
at application.DBReader.readSheet1(DBReader.java:90)
at application.Main.start(Main.java:19)
at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$159(Unknown Source)
at com.sun.javafx.application.LauncherImpl$$Lambda$53/678208545.run(Unknown Source)
at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$172(Unknown Source)
at com.sun.javafx.application.PlatformImpl$$Lambda$46/410424423.run(Unknown Source)
at com.sun.javafx.application.PlatformImpl.lambda$null$170(Unknown Source)
at com.sun.javafx.application.PlatformImpl$$Lambda$48/471405867.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.application.PlatformImpl.lambda$runLater$171(Unknown Source)
at com.sun.javafx.application.PlatformImpl$$Lambda$47/1963387170.run(Unknown Source)
at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(Unknown Source)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.lambda$null$145(Unknown Source)
at com.sun.glass.ui.win.WinApplication$$Lambda$36/237061348.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Allerdings verstehe ich nicht wieso das passiert, hier der Code:
Java:
            if(row!=null) {
                System.out.println("row!=null");
            }
            if(row.getLastCellNum()-1>=5) { //ERROR: java.lang.NullPointerException
                System.out.println("in if"); //wird nicht ausgeführt
                sDA =  row.getCell(4).getDateCellValue();
                System.out.println(sDA);
            }
Java:
package application;


import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.ZoneId;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.ss.usermodel.Row;




public class DBReader {
    List<Mini> miniList = new ArrayList<Mini>();
  
    public List<Mini> readSheet1() throws FileNotFoundException, IOException{
      
        HSSFWorkbook wb = new HSSFWorkbook(new FileInputStream("DB.xls"));
      
        HSSFSheet sheet = wb.getSheetAt(0);
        for(int i=0;i<=sheet.getLastRowNum();i++) {
            String name = "error";
            double age = 4;
            int max=10;
            Date sDA;
            Date sDE;
          
         
            Row row = sheet.getRow(i);
            if(row ==null) {
                System.out.println("row=null");
                continue;
            }
          
            Cell c = row.getCell(0);
            c.setCellType(CellType.STRING);
          
          
          
            if(c.getCellTypeEnum()==CellType.STRING) { //NAME
              
                name = row.getCell(0).getStringCellValue();
              
            } else {
                System.out.println("Zeichenkette benötigt");
            }
          
            if(row.getCell(1).getCellTypeEnum()==CellType.NUMERIC) { //BirthYear
                age = row.getCell(1).getNumericCellValue();
              
            } else {
                System.out.println("nur Zahlen erlaubt");
            }
          
            if(row.getCell(2).getCellTypeEnum()==CellType.NUMERIC) { //MaxMini
                max = (int) row.getCell(2).getNumericCellValue();
              
            } else {
                System.out.println("nur Zahlen erlaubt");
            }
          
            if(row!=null) {
                System.out.println("row!=null");
            }
            if(row.getLastCellNum()-1>=5) { //ERROR: java.lang.NullPointerException
                System.out.println("in if"); //wird nicht ausgeführt
                sDA =  row.getCell(4).getDateCellValue();
                System.out.println(sDA);
            }
              
          
          
          
          
            Mini m = new Mini(name, age,max);
            miniList.add(m);
          
        }
    wb.close();
    return miniList;
      
    }
  
    public void writeMiniList(List<Mini> lM) throws FileNotFoundException, IOException {
      
        HSSFWorkbook wb = new HSSFWorkbook();
      
        HSSFSheet sheet = wb.createSheet("Main");
      
      
      
      
        for(int i=0;i<=lM.size()-1;i++) { //
            String n = lM.get(i).getName();
            int b = lM.get(i).getBirthYear();
            int mM =lM.get(i).getMaxMini();
          
            if(sheet.getRow(i)==null) {
                HSSFRow row = sheet.createRow(i);
                HSSFCell name = row.createCell(0);
                HSSFCell birthYear = row.createCell(1);
                HSSFCell maxMini = row.createCell(2);
              
                name.setCellValue(n);
                birthYear.setCellValue(b);
                maxMini.setCellValue(mM);
            } else {
                HSSFRow row = sheet.getRow(i);
                HSSFCell name = row.getCell(0);
                HSSFCell birthYear = row.getCell(1);
                HSSFCell maxMini = row.getCell(2);
              
                name.setCellValue(n);
                birthYear.setCellValue(b);
                maxMini.setCellValue(mM);
            }
      
        }
      
        try {
          
            wb.write(new FileOutputStream("DB.xls"));
            System.out.println("File updated");
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
      
        try {
            wb.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
      
    }
    public LocalDate convertDateToLocalDate(Date dateToConvert) {
        return dateToConvert.toInstant()
          .atZone(ZoneId.systemDefault())
          .toLocalDate();
    }
  
}
 

httpdigest

Top Contributor
Naja, wenn row null ist läufst du ja trotzdem in den Code mit dem getLastCellNum() Aufruf hinein. Vermutlich wurde auch nicht ausgegeben "row!=null".
 

httpdigest

Top Contributor
Poste bitte mal die korrekte Klasse DBReader mit dem korrekten Stacktrace. In dem von dir geposteten Codeschnipsel der Klasse DBReader zeigt Zeile 90 auf eine ungültige Codezeile.
Und ganz sicher ist row null, wenn es sich wirklich um diese Zeile handelt, in der die Exception geworfen wird.
Benutze einfach einen Debugger, und gucke, ob row dort null ist.
 

fabipfolix

Mitglied
Poste bitte mal die korrekte Klasse DBReader mit dem korrekten Stacktrace. In dem von dir geposteten Codeschnipsel der Klasse DBReader zeigt Zeile 90 auf eine ungültige Codezeile.
Und ganz sicher ist row null, wenn es sich wirklich um diese Zeile handelt, in der die Exception geworfen wird.
Benutze einfach einen Debugger, und gucke, ob row dort null ist.
Im Spoiler ist die ganze Klasse DBReader und Zeile 90 hat doch gar keinen Inhalt :eek:

Das mit dem Debugger könnte ein Weilchen dauern, keine Ahnung wie das funktioniert ^^
 

fabipfolix

Mitglied
Ups, ich hatte Leerzeilen gelöscht
Java:
package application;


import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.ZoneId;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.ss.usermodel.Row;




public class DBReader {
    List<Mini> miniList = new ArrayList<Mini>();
 
    public List<Mini> readSheet1() throws FileNotFoundException, IOException{
     
        HSSFWorkbook wb = new HSSFWorkbook(new FileInputStream("DB.xls"));
     
        HSSFSheet sheet = wb.getSheetAt(0);
        for(int i=0;i<=sheet.getLastRowNum();i++) {
            String name = "error";
            double age = 4;
            int max=10;
            Date sDA;
            Date sDE;
         
        
            Row row = sheet.getRow(i);
            if(row ==null) {
                System.out.println("row=null");
                continue;
            }
         
            Cell c = row.getCell(0);
            c.setCellType(CellType.STRING);
         
         
         
            if(c.getCellTypeEnum()==CellType.STRING) { //NAME
             
                name = row.getCell(0).getStringCellValue();
             
            } else {
                System.out.println("Zeichenkette benötigt");
            }
         
            if(row.getCell(1).getCellTypeEnum()==CellType.NUMERIC) { //BirthYear
                age = row.getCell(1).getNumericCellValue();
             
            } else {
                System.out.println("nur Zahlen erlaubt");
            }
         
            if(row.getCell(2).getCellTypeEnum()==CellType.NUMERIC) { //MaxMini
                max = (int) row.getCell(2).getNumericCellValue();
             
            } else {
                System.out.println("nur Zahlen erlaubt");
            }
         
            if(row!=null) {
                System.out.println("row!=null");
            }
            if(row.getLastCellNum()-1>=5) { //ERROR: java.lang.NullPointerException
                System.out.println("in if"); //wird nicht ausgeführt
                sDA =  row.getCell(4).getDateCellValue();
                System.out.println(sDA);
            }
             
         
         
         
         
            Mini m = new Mini(name, age,max);
            miniList.add(m);
         
        }
    wb.close();
    return miniList;
     
    }
 
    public void writeMiniList(List<Mini> lM) throws FileNotFoundException, IOException {
     
        HSSFWorkbook wb = new HSSFWorkbook();
     
        HSSFSheet sheet = wb.createSheet("Main");
     
     
     
     
        for(int i=0;i<=lM.size()-1;i++) { //
            String n = lM.get(i).getName();
            int b = lM.get(i).getBirthYear();
            int mM =lM.get(i).getMaxMini();
         
            if(sheet.getRow(i)==null) {
                HSSFRow row = sheet.createRow(i);
                HSSFCell name = row.createCell(0);
                HSSFCell birthYear = row.createCell(1);
                HSSFCell maxMini = row.createCell(2);
             
                name.setCellValue(n);
                birthYear.setCellValue(b);
                maxMini.setCellValue(mM);
            } else {
                HSSFRow row = sheet.getRow(i);
                HSSFCell name = row.getCell(0);
                HSSFCell birthYear = row.getCell(1);
                HSSFCell maxMini = row.getCell(2);
             
                name.setCellValue(n);
                birthYear.setCellValue(b);
                maxMini.setCellValue(mM);
            }
     
        }
     
        try {
         
            wb.write(new FileOutputStream("DB.xls"));
            System.out.println("File updated");
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
     
        try {
            wb.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
     
    }
    public LocalDate convertDateToLocalDate(Date dateToConvert) {
        return dateToConvert.toInstant()
          .atZone(ZoneId.systemDefault())
          .toLocalDate();
    }
 
}


wb.close() ist also das Problem.
 

httpdigest

Top Contributor
Auch jetzt zeigt Zeile 90 immer noch nicht auf eine gültige Codezeile. Und wb.close() ist ganz sicher nicht das Problem. Wenn wb null wäre, würde es schon viel früher knallen bei wb.getSheetAt(0);.
 

Robat

Top Contributor
Java:
for(int i=0;i<=sheet.getLastRowNum();i++)
Sicher, dass du hier <= schreiben wolltest? Laut Doku ist getRow(int) doch 0-based.
 

httpdigest

Top Contributor
<= ist richtig. getLastRowNum() liefert ja nicht die Anzahl der Zeilen, sondern den tatsächlichen Index der letzten Zeile. Wenn das Sheet also nur eine einzige Zeile hat, ist getLastRowNum() == 0.
 

fabipfolix

Mitglied
Allerdings hat meine Datei mindestens 3 Zellen pro Reihe
EDIT: ah hab mich wohl verlesen. Ich schaus mir später nochmal an, habe gerade keine Zeit mehr.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B NullPointerException - Aber kein Fehler im Code Allgemeine Java-Themen 4
F NullPointerException aber warum ? Allgemeine Java-Themen 9
G NullPointerException, aber warum? Allgemeine Java-Themen 10
Zeppi NullPointerException in einer if-Abfrage Allgemeine Java-Themen 6
T imagej-server NullPointerException Allgemeine Java-Themen 1
L Methoden NullpointerException Allgemeine Java-Themen 5
B OOP Auslöser für NullPointerException Allgemeine Java-Themen 3
I Vererbung Nicht erklärliche NullPointerException Allgemeine Java-Themen 7
Drachenbauer warum bekomme ich hier eine NullPointerException Allgemeine Java-Themen 6
I Array Parameter mit 2 Klassen - NullPointerException Allgemeine Java-Themen 3
S Exception in thread "main" java.lang.NullPointerException at FamilienApp.main(FamilienApp.java:15) Allgemeine Java-Themen 1
S Methoden Problem mit NullPointerException Allgemeine Java-Themen 9
F Input/Output NullPointerException with Apache POI Allgemeine Java-Themen 7
P wiedermal NullPointerException Allgemeine Java-Themen 2
kodela NullPointerException Allgemeine Java-Themen 2
L Variablen NullPointerException (RSA) Allgemeine Java-Themen 2
B NullPointerException bei @Inject JSF Allgemeine Java-Themen 0
Arif Probleme mit NullPointerException Allgemeine Java-Themen 2
G String an Arduino senden NullPointerException in PrintWriter Allgemeine Java-Themen 6
Z NullPointerException beim Schreiben einer ArrayList in eine Datei Allgemeine Java-Themen 6
R NullPointerException Ohne Grund Allgemeine Java-Themen 5
D ByteBuffer getInt NullpointerException Allgemeine Java-Themen 4
S JavaMail - MailSubject,MailFrom,MailDate in String Array speichern NullPointerException Allgemeine Java-Themen 2
T Compiler-Fehler NullpointerException! Allgemeine Java-Themen 7
A Methode ergibt Java NullpointerException. Allgemeine Java-Themen 3
F Socket NullPointerException Bitte um hilfe! Allgemeine Java-Themen 12
L NullPointerException bei Instanzvarialen Allgemeine Java-Themen 3
B Compiler-Fehler NullPointerException beim Auslesen von .lang-Datei Allgemeine Java-Themen 3
I Fehler java.lang.NullPointerException Allgemeine Java-Themen 5
H java.lang.NullPointerException Allgemeine Java-Themen 5
L Interpreter-Fehler java.lang.NullPointerException Allgemeine Java-Themen 17
M JSON NullPointerException Allgemeine Java-Themen 5
M NullpointerException Allgemeine Java-Themen 2
L Eclipse NullPointerException Allgemeine Java-Themen 6
M Fitness-Rechner: NullPointerException Allgemeine Java-Themen 7
G Thread erzeugt nicht plausible NullPointerException Allgemeine Java-Themen 7
A java.lang.NullPointerException bei Schleife Allgemeine Java-Themen 3
K Unerklärliche nullpointerexception Allgemeine Java-Themen 6
C Was bekomme ich eine Nullpointerexception? (Apache POI) Allgemeine Java-Themen 3
S javadoc java.lang.NullPointerException Allgemeine Java-Themen 2
K 3Dimensionales Feld - NullPointerException Allgemeine Java-Themen 2
J Compiler-Fehler NullPointerException Allgemeine Java-Themen 12
T Compiler-Fehler NullPointerException bei ADT LinkedTree Allgemeine Java-Themen 31
P Beim sortieren nullpointerexception Allgemeine Java-Themen 12
3 MP3-Finder wirft NullPointerException Allgemeine Java-Themen 13
M NullPointerException MenuItem Allgemeine Java-Themen 7
S Dialog einblenden bei NullPointerException Allgemeine Java-Themen 5
T DefaultTableModel NullPointerException Allgemeine Java-Themen 7
ruutaiokwu NullPointerException auf member, die per konstruktor gesetzt wird (multithread-kontext) Allgemeine Java-Themen 2
B NullPointerException ohne Angabe Allgemeine Java-Themen 5
F Array NullPointerException Allgemeine Java-Themen 26
B NullPointerException bei Wertzuweisung Allgemeine Java-Themen 3
C NullPointerException Allgemeine Java-Themen 9
MonsterBit java.lang.NullPointerException Allgemeine Java-Themen 2
O NullPointerException (wohl Denkfehler) Allgemeine Java-Themen 5
N Warum nullPointerException? Allgemeine Java-Themen 13
N Generics-NullpointerException Allgemeine Java-Themen 7
J NullPointerException mit HashMap Allgemeine Java-Themen 2
B NullPointerException bei new XStream() Allgemeine Java-Themen 2
J java.lang.NullPointerException bei Threadprogrammierung Allgemeine Java-Themen 9
J NullPointerException bei JasperReports Allgemeine Java-Themen 2
V NullPointerException bei Vector Allgemeine Java-Themen 2
G Warum kommt hier NullPointerException? Allgemeine Java-Themen 3
G NullPointerException Allgemeine Java-Themen 5
R Immer wieder NullPointerException Allgemeine Java-Themen 2
M NullPointerException Allgemeine Java-Themen 4
J Fehler: java.lang.NullPointerException Allgemeine Java-Themen 2
G NullPointerException problem Allgemeine Java-Themen 30
mhauert NullPointerException bei Zugriff auf JNI Objekt Allgemeine Java-Themen 6
J Folgender Fehler: java.lang.NullPointerException Allgemeine Java-Themen 4
T NullPointerException nach Java Update Allgemeine Java-Themen 4
G NullPointerException Allgemeine Java-Themen 6
H NullPointerException trotz Abfangen von null? Allgemeine Java-Themen 9
H nullPointerException bei [ArrayList<String>.add(.)] Allgemeine Java-Themen 3
H NullPointerException Allgemeine Java-Themen 10
P NullPointerException Allgemeine Java-Themen 8
A NullPointerException, Thread soll Thread steuern Allgemeine Java-Themen 2
MQue Sichtbarkeit/HashMap/NullPointerexception Allgemeine Java-Themen 2
MQue NullPointerException Allgemeine Java-Themen 17
A NullPointerException Allgemeine Java-Themen 15
G java.lang.NullPointerException JFreeChart Allgemeine Java-Themen 5
A NullPointerException Allgemeine Java-Themen 11
G Methode mit Schleifen NullPointerException Allgemeine Java-Themen 2
B Pobleme mit NullpointerException Allgemeine Java-Themen 13
M java.lang.NullPointerException im Chatclient Allgemeine Java-Themen 12
S NullPointerException beim Laden von BMPs Allgemeine Java-Themen 3
B java.lang.NullPointerException Allgemeine Java-Themen 11
M NullPointerException bei Subklasse ohne MediaTracker Allgemeine Java-Themen 12
G Problem mit NullPointerException Allgemeine Java-Themen 5
D NullPointerException wo keine sein sollte. Allgemeine Java-Themen 2
F NullpointerException beim Einlesen einer Datei Allgemeine Java-Themen 13
V Button schließen - NullPointerException Allgemeine Java-Themen 6
V NullPointerException Allgemeine Java-Themen 12
S Java Programm lässt sich vom USB-Stick starten, aber nicht von HDD Allgemeine Java-Themen 16
8u3631984 Strukturiertes Logging : Jedes Feld in eine seperate Zeile - aber wie ? Allgemeine Java-Themen 2
berserkerdq2 Wenn ich bei Intelij javafx mit maven importieren will, muss ich das in die pom.xml reintun, aber warum noch in module-info.java? Allgemeine Java-Themen 3
N JAVA-Code mit Grafikfenster zeichnet in Windows, aber nicht Mac. Allgemeine Java-Themen 4
M Klasse durch Klassen Aufteilung verbessern, aber wo? Allgemeine Java-Themen 1
Thallius Zeitzone zu einem LocalDate hinzufügen aber ohne es zu ändern... Allgemeine Java-Themen 2
L Kursverlauf vorhersagen mit Deeplearning4j, aber komischer Knick am Anfang der Vorhersage Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben