NPE, aber kA warum!

Status
Nicht offen für weitere Antworten.

T1M

Bekanntes Mitglied
Sers,
ich bekomm ne dämliche NullPointerException ...
hab mal mit System.out.println geguckt was wann in den variablen steht. und es wird richtig aus der datenbank ausgelesen. es wird richtig an die klasse KreissaalPat in die Methoden (z.B. getName) übergeben.
aaaaaber da gibt es dann die npe:
Klasse Tafel:
Code:
...
	private Object[][] data =  new Object[100][15];
	private KreissaalPat[] pats = new KreissaalPat[100];
...

pats = dbfrids.getKrspat();
		  //System.out.println("data vor for-schleife: " + data);
		  //System.out.println("pats nach dbfrids.getKrspat(): " + pats);
		  
		  for (int i=0; i<pats.length; i++)
		  {
		  	data[i][0]= pats[i].getStation();
		  	data[i][1]= pats[i].getName();
           ...
        }
...
NPE in Zeile 12. wird die einkommentiert, NPE in Zeile 13 ...
warum?
Klasse KreissaalPat:
Code:
...
public String getName()
	{
	    System.out.println("Name aus KreissaalPat: " + Name);
	    return Name;
	}
...
da gibt er mir die richtigen namen aus. also steht was drin.
[schild=13 fontcolor=000000 shadowcolor=C0C0C0 shieldshadow=1]Need HEEEEELP!!!![/schild]
Danke,
T1M
 
kannst du mal die zeile markieren die ne exception wirft ? dbfrids ist != null ? Hast du auch mal pats nach Aufruf der Methode kontrolliert ?
 
auf den ersten Blick scheint die variable pats hier null zu sein
Code:
pats = dbfrids.getKrspat();
schau dir mal die Methode getKrspat an, ob die richtig arbeitet
 
Code:
data[i][0]= pats[i].getStation();
da kommt die npe.
getKrspat() liest die daten richtig aus der datenbank aus. hab das mit mehreren System.out.printlns überprüft.
danke, für die schnellen antworten! 😀
 
schau doch in der schleife nach ob pats != null ist, die getKrSpat() (oder wie auch immer) methode liefert also ein Array vom Typ KreissaalPat zurück und das ist korrekt befüllt ?
 
hmm..., wie mach ich das denn?
mit nem
Code:
System.out.println("pats nach dbfrids.getKrspat(): " + pats);
bekomm ich nur: pats nach dbfrids.getKrspat(): [Luniulm.ufk.frids.KreissaalPat;@1b9240e[/code]
 
das is mein getKrspat() Methode.
in den Sop am ende stehen die richtigen Stationen, Namen, ... Von daher wird die Methode schon richtig arbeiten - denk ich ...
Code:
public KreissaalPat[] getKrspat()
    {
    	System.out.println("getKrspat");
    	int i=0;
    	KreissaalPat[] patienten= new KreissaalPat[100];
    	String sql = "select station, name, privat, et, ssw, gravida, para, foeten, " +
    			"kindslage, diag, ther, lila, ctg_ges, paedinf, anauf " +
    			"from krstafel2";
    
        Statement query = null;
        ResultSet daten = null;
        
        try 
        {
             query = db.createStatement();
             daten = query.executeQuery(sql);
             while(daten.next())
             {
             	String Name = daten.getString("name");
             	String Station = daten.getString("station");
             	String P_ = daten.getString("privat");
             	String ET = daten.getString("et");
             	String SSW = daten.getString("ssw");
             	String G = daten.getString("gravida");
             	String P = daten.getString("para");
             	String F = daten.getString("foeten");
             	String Lage = daten.getString("kindslage");
             	String Diagnose = daten.getString("diag");
             	String Therapie = daten.getString("ther");
             	String v = daten.getString("lila");
             	String CTG = daten.getString("ctg_ges");
             	String Pädiater_informiert = daten.getString("paedinf");
             	String AN_Aufklärung = daten.getString("anauf");
             	
             	patienten[i] = new KreissaalPat(Station, Name, P_, ET, SSW, G, P, F,
             								Lage, Diagnose, Therapie, v, CTG, 
											Pädiater_informiert, AN_Aufklärung);
             	/*System.out.println("patienten[i]: " + patienten[i]);
             	System.out.println("Station: " + Station);
             	System.out.println("Name: " + Name);
             	System.out.println("privat: " + P_);
             	System.out.println("et: " + ET);
             	Funktioniert: Richtiger Inhalt wird eingelesen und in
             	KreissaalPat.java übergeben
             	*/
             	i++;
             }
        daten.close();
        query.close();
        }
        catch(Exception e) {System.out.println("Fehler in Abfrage: "+ e);}
        
        return patienten;
    }
edit: jaja, ich weiß: variablen werden klein geschrieben ... :roll:
 
du könntest innerhalb der for schleife jeweils mal gucken ob pats null ist oder nicht.u. dir ansonsten die datensätze mal ausgeben lassen. die S.O.P.'s in der Methode werden korrekt ausgeführt (also die Daten werden richtig ausgegeben) ?
 
ok, die Sops die in der methode Krspat stehen werden alle richtig ausgegeben!!! die stimmen:
hab die for schleife mal so erweitert:
Code:
for (int i=0; i<pats.length; i++)
		{
			if(!pats[i].equals(null))
			{
				System.out.println("pats[i] ist NICHT null!!!");				
			}
			else
			{
				System.out.println("pats[i] ist null!!!");
			}
			data[i][0]= pats[i].getStation();
			data[i][1]= pats[i].getName();
         ...
		}
ergebnis: pats[i] ist NICHT null!!!
pats[i] ist NICHT null!!!
Exception in thread "main" java.lang.NullPointerException
        at Tafel.<init>(Tafel.java:418) //also hier zeile 11
 
yeah, yeah, yeah!!!!
er schmeißt mir ne npe, weil er wegen pats.length übers ziel hinausschießt.
ich hab 2 datensätze (zeilen) in der test-DB. aber durchein SOP von i hab ich rausgefunden, das er i= 0, dann 1, und dann 2 setzt. aber 2 gibbet ja nimmer. 😀
wer mir wohl n sql-statement schreiben müssen ..., oder gibts da was passendes in java???
Yeah, und vielen Dank euch beiden!!! 😀

edit: so, hab mir schnell ne methode getRowCount() geschrieben, und das anstatt pats.length in die forschleife gesetzt.[schild=6 fontcolor=000000 shadowcolor=C0C0C0 shieldshadow=1]Alles ist gut!!![/schild]
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben