Hilfe bei java.lang.NullPointerException?
Wir haben bei von der Uni eine Aufgabe bekommen, bei der schon ein teil vergegeben war. jedoch kommt bei mir in diesem teil ein Fehler den ich nicht ganz nachvollziehen kann.
Exception in thread "main" java.lang.NullPointerException
Wieso kommt sowas beim einlesen?
import java.io.*;
public class WoerterRaten {
public static void main(String[] args) throws IOException {
Wort[] woerter = einlesen("beispiel.txt");
}
public static Wort[] einlesen(String file) throws IOException {
BufferedReader in = new BufferedReader(new FileReader(file));
int anzahl = Integer.parseInt(in.readLine());
Wort[] woerter = new Wort[anzahl];
for(int i=0; i<anzahl; i++) {
woerter[i] = new Wort(in.readLine());
}
return woerter;
}
}
3 Antworten
Wenn der Text der Datei wie du sagst ist:
6JavaKlasseObjektMethodeAttributVererbung
Ich vermute der Fehler liegt darin, das du
int anzahl = Integer.parseInt(in.readLine());
versuchst.
in.readLine() liest dabei die ganze Zeile, nicht nur das erste Zeichen. Daran dürfte es liegen, das Integer.parseInt() überhaupt funktioniert dann wundert mich allerdings. Naja schau dir am besten noch mal die Dokumentation des BufferedReader an.
Der Fehler ist zumindest dann, das das Array woerter nicht korrekt initialisiert wurde.
Eine Nullpointer Exception tritt fast immer auf einer Zeile auf, wo der Punkt Operator (.) verwendet wird.
Z. B.
Object o;
o = null;
o.tuEtwas; // <-- hier, ist o Null
In der Regel ist es die Referenz links vom Punkt, die eben nicht auf ein Objekt, sondern auf "null" zeigt.
In Deinem Fall kann es aber auch daher kommen, dass in.readLine() eben null zurück gibt. Z. B. bei einer leeren Datei. Dann darf "Integer.parseInt(null)" auch eine Nullpointer Exeption liefern.
Schau mal was "in.readLine()" zurück gibt. Z. B
String s = in.readLine();
System.out.println(s);
// und erst dann
Integer.parseInt(s);
Könnte es sein, dass die Variable "file" ("beispiel.txt") nicht den korrekten Pfad enthält zur Datei enthält? Eine NullPointerException tritt dann auf, wenn etwas angegebenes nicht existiert. "beispielt.txt" scheint nicht zu existieren falls ich mich nicht irre.
es geht jetzt ... ich habe bei dem objekt wort etwas noch nicht initialisiert und deshalb konnte er es nicht erstellen -.- hätte man ja auch in den fehler packen können aber gut trotzdem danke ;)
Der Pfad ist kein Problem, dann gäbe es eine andere Exception, nämlich FileNotFoundException oder I/O-Exception
Mit BufferedReader kenne ich mich nicht sonderlich gut aus, aber inkrementiert die Funtion in.readLine() nicht die Zeilennummer, aus welcher gelesen wird? Falls das so ist - und du zwischen den Wörtern keinen Zeilenumbruch gemacht hast - hat die Zeile 2 keinen Wert, somit null. Wenn du nun versuchst einen Wert der Klasse Wort() zuzuweisen, gibt es keinen Wert. Somit eine NullPointerExeption.
Der Fehler kommt in dieser Zeile:
woerter[i] = new Wort(in.readLine());
und an dem Speicherpfad liegt es nicht. Ich habe kurz die Datei umbenannt und dann kam der Fehler:
Exception in thread "main" java.io.FileNotFoundException: beispiel.txt (Das System kann die angegebene Datei nicht finden)
doch beispiel txt existiert und ist im richtigen ordner
btw der inhalt der datei:
6JavaKlasseObjektMethodeAttributVererbung
momentmal was mir grade auffällt kann es sein das der die wörter ja garnicht unterscheiden kann und in 0 alles schreibt und in 1 bis 5 nichts?