NullPointerException

Lukases2

Aktives Mitglied
Ich erhalte bei folgendem Code eine java.lang.NullPointerException:

Java:
package apack;

import java.io.FileReader;
import java.io.IOException;

public class Person {
	private String vorname, nachname;
	private boolean anwesend;
	private String dateiname;				//added: dateiname
	
	
	
	public String getName(){
		if (anwesend) return vorname+" "+nachname+" ist anwesend.";
		else return vorname+" "+nachname+" ist nicht anwesend.";
	}
	
	
	public void setAttribut(int zaehler, String name){
		if (zaehler == 1) vorname = name;
		if (zaehler == 2) nachname = name;
		if (zaehler == 3 && name.charAt(0) == '+') anwesend = true;
		else anwesend = false;
	}
	
	public String listeLesen(){
		String s = "";
		
		FileReader reader = null;
		
		try{
			reader = new FileReader(dateiname);
			
			int c = reader.read();
			
			while(c != -1){
				s = s + (char)c;
				c = reader.read();
			}
		}catch (IOException e){
			e.printStackTrace();
		}
		
		return s;
	}
	
	public static void main(String[] args) {
		Person person = new Person();
		System.out.println(person.listeLesen());
	}
}

Ich verstehe nicht genau, woran das liegt. An welcher Stelle soll die null anstelle einer Instanz eines Objekts verwendet worden sein?
 
Die komplette Fehlermeldung sieht so aus:

Exception in thread "main" java.lang.NullPointerException
at java.io.FileInputStream.<init>(Unknown Source)
at java.io.FileInputStream.<init>(Unknown Source)
at java.io.FileReader.<init>(Unknown Source)
at apack.Person.listeLesen(Person.java:32)
at apack.Person.main(Person.java:49)
 
Habe mir deinen Code mehrmals angeschaut aber für mich ist kein Fehler... ich bin auch kein Profi oder sonst so aber wenn deine Konsole "Unknown Source" auspuckt ist da wohlmöglich etwas vergessen worden oder du hast etwas falsch bezeichnet sodass die Konsole es nicht "zurück verfolgen" kann.
Mehr weiß ich leider nicht

Gruß Exception Error.
 
Moin,

nein, so wie es im StackTrace steht: "at apack.Person.listeLesen(Person.java:32)"

Hier
Java:
reader = new FileReader(dateiname);
ist halt "dateiname" null, da nirgendwo initialiert .....

Gruß
Klaus
 
Was schlägst du zur Verbesserung vor?

Java:
	private String dateiname;				//added: dateiname
.....
	reader = new FileReader(dateiname);

Du erstellst ein FileReader Objekt das von einer Datei lesen soll, deswegen übergibst du dem Konstruktor von FileReader den Parameter "dateiname".
Wo legst du denn den Wert von "dateiname" fest? Woher soll das Programm wissen welche Datei es denn nun lesen soll?

Weitere Verbesserungen:
Ich erhalte bei folgendem Code eine java.lang.NullPointerException:

Java:
	public String getName(){
		if (anwesend) return vorname+" "+nachname+" ist anwesend.";
		else return vorname+" "+nachname+" ist nicht anwesend.";
	}
	
	
	public void setAttribut(int zaehler, String name){
		if (zaehler == 1) vorname = name;
		if (zaehler == 2) nachname = name;
		if (zaehler == 3 && name.charAt(0) == '+') anwesend = true;
		else anwesend = false;
	}

Auch wenn diese Schreibweie Codezeilen spart: Versuche immer mit Klammern zu arbeiten, so musst du bei späteren Änderungen nicht daran denken welche hinzuzufügen (fall es doch mehr als eine Anweisung wird im if) 🙂
Außerdem ist es so schwerer zu lesen/sehen was von der Zeile gehört zur Bedingung, was ist der auszuführende Code wenn die Bedingung zutrifft.
 
Ich habe "dateiname" abgeschafft und geändert:
Java:
reader = new FileReader("anwesenheit.txt");

Funktioniert jetzt alles, Danke 😉
 
Moin,

nimm' es mir bitte nicht übel ..... aber verstanden hast Du unsere Posts/Anmerkungen nicht, oder ???? ;(

Gruß
Klaus
 
Zuletzt bearbeitet:
Ja doch, eigentlich gibt es ja nicht so viel zu verstehen.
Die NullPointerException stammt daher, dass der "Zeiger" eben auf kein Zeichen zeigen konnte, dass er ablesen soll, weil ja für "dateiname" nichts eingesetzt war.

Was die andere Verbesserung angeht:
Java:
Weitere Verbesserungen:
Zitat Zitat von Lukases2 Beitrag anzeigen
Ich erhalte bei folgendem Code eine java.lang.NullPointerException:

Java Code:

     
    public String getName(){
    if (anwesend) return vorname+" "+nachname+" ist anwesend.";
    else return vorname+" "+nachname+" ist nicht anwesend.";
    }
     
     
    public void setAttribut(int zaehler, String name){
    if (zaehler == 1) vorname = name;
    if (zaehler == 2) nachname = name;
    if (zaehler == 3 && name.charAt(0) == '+') anwesend = true;
    else anwesend = false;
    }
Das hat mein Professor geschrieben und das hängt mit einer Aufgabe zusammen, die ich machen soll.
 

Neue Themen


Zurück
Oben