java.lang.NullPointerException Problem

desaster0505

Erfahrenes Mitglied
Hallo habe folgenden Java Code :

Java:
//------------------------------------------------------------------------------------------
Address eingabe=new Address();
eingabe.setStreet("Nibelungenallee");
	  eingabe.setCity("Frankfurt");
	  eingabe.setCountry("de");
	  
	  //CoordinateAndAddress ort=new CoordinateAndAddress();
	  CoordinateAndAddress[] ort=null;
         ort[0].setAddress(eingabe);    //hier tritt obiger Fehler auf
	 
	  
	  
	  	  
		FindByPointsRequest Request=new FindByPointsRequest();
		
		
		
		Request.setPoints(ort);   //setPoints erwartet ein Array  //CoordinateAndAddress[]
//--------------------------------------------------------------------------------------------------------------

Kriege aber in Eclipse dann obige Fehlermeldung (java.lang.NullPointerException ) für die markierte Zeile und weiß einfach nicht mehr weiter.

Hoffe, es kann mir einer sagen, wie ich das Problem lösen kann.
 
Hallo,

das Problem ist das Du Dein Array Ort mit null initialisierst.
Wie genau jetzt der Code lauten muss, kann ich Dir leider nicht sagen, da ich Deine Klassen nicht kenne.
Gruß KlaDi.
 
Zuletzt bearbeitet:
Vielleicht noch ein paar Worte zur Erläuterung.

Das Initialisieren von deinem Array läuft so ab (freihand getippt):

Java:
CoordinateAndAdress[] ort = new CoordinateAndAdress[10] //Hier legst du den Speicher für 10 Objekte an
//Die Instanzen sind aber noch nicht initialisiert. Dass muss du dann für jedes Feld Extra machen
for(CoordinateAndAdress ca : ort){ //Geht erst ab java 5 so!
ca = new CoordinateAndAdress(); //Der Konstruktor
}

Das Problem mit Arrays (eigentlich kein Problem, eher eine Eigenschaft) ist, dass sie grundsätzlich erstmal statisch sind. Zum erweitern musst du einen neue Struktur erstellen und die alte kopieren.
Du willst aber wahrscheinlich die Struktur dynamisch erweitern können? In dem Falle solltest du dann eher zu einer Java Collection greifen. In dem Falle reicht denke ich ein einfacher Vector.

Ich hoffe meine Ausführungen waren hilfreich (und richtig :p)

MfG
Daniel
 
Ja,super. Danke, habe zwei Tage damit verbracht, die Variable richtig zu initialisieren ohne Erfolg :) . Deine Methode kannte ich gar nicht.

Jetzt meldet mir Eclipse an dieser Stelle keine Fehler mehr.

Nur mal interessehalber ...was passiert wenn ich, nachdem ich eine Array genutzt habe ein weiteres belegen will...

also ca.setadress hat geklappt. aber was ich wenn ich nochmal ein setadress machen möchte Mit ca[1].setadress geht das wohl nicht ..., aber ist nur interessehalber, mein Problem kommt nicht mehr..

Danke
 
Die Zeilen 3-5 itterieren über das Array... d.h. ca beinhaltet immer den aktuellen Wert. Du kannst ausserhalb über ort[index] darauf zugreifen.

Gruß Dominik
 
Hallo Leute, mein Problem besteht weiterhin, mache jetzt folgendes :

Code:
  CoordinateAndAddress []ort = new CoordinateAndAddress[1];
	  
	  for(CoordinateAndAddress ca : ort){ //Geht erst ab java 5 so!
	  
	  ca = new CoordinateAndAddress(); //Der Konstruktor
	  }
	ort[0].setAddress(eingabe);    // Beim Debuggen stellt man, fest, immer noch Initialisierungsfehler
	  
	  	  
		FindByPointsRequest Request=new FindByPointsRequest();
		Request.setPoints(ort);     //hier soll der Ort übergeben werden, als Array

Ich kann zwar in der For-Schleife sagen ca.setadress(eingabe) ("eingabe" ist ein objekt, welches strasse etc enthält), aber das kann ich dem setPoint nicht übergeben :( . Ich verzweifel langsam an dem Problem.
 
Guden ! Jetzt hast sich das Problem aber wirklich erledigt ! Er sagte als Fehler, dass Ort=null ist. Obwohl ich die for-Schleife benutzte. Die Schleife hab ich bisschen abgeändert und es scheint jetzt fürs erste zu gehen.

Hier der Code:
Code:
  for(CoordinateAndAddress ca : ort){ //Geht erst ab java 5 so!
	  
//	  ca = new CoordinateAndAddress(); //Der Konstruktor
//	  ca.setAddress(eingabe);
	  ort[0]=new CoordinateAndAddress();
	
	  }
	  ort[0].setAddress(eingabe);
 
Args,

mea culpa! So sollte es gehen... Diesmal auch wirklich getestet ;)

Java:
    public void testArray(){
        DataClass[] dat = new DataClass[5];
        for(int i = 0; i<dat.length; i++){  //Hier lag der Fehler
            dat[i] = new DataClass();
        }
        
        dat[0].setDat("Hier steht nun was drin!");
        dat[1].setDat("Hier auch!");
        //...
        
        System.out.println(dat[0].getDat());
    }


Es ist offensichtlich so, dass wenn du das Array mit dem for(Object x : Collection) ("erweiterte for Schleife") Syntax durchläufst, x nur innerhalb des for blocks gültig ist (soweit auch nachvollziehbar^^). Ich bin allerdings davon ausgegangen, dass x in diesem falle eine Referenz auf die Speicherstelle wäre, was offensichtlich aber nicht der Fall ist (hab leider auf die schnelle keinen Beleg dafür gefunden). Vielleicht kann dazu jemand hier aus dem Forum noch was genaueres erzählen ;)

Jedenfalls klappt es mit dem Beispiel da oben.

Was ich dir ansonsten noch empfehlen würde, desaster0505 sind folgende links:
http://javabuch.de/
http://www.galileocomputing.de/openbook/javainsel6/
Da stehen massenhaft Basics und Erweiterte Elemente von Java beschrieben.

MfG
Daniel
 
Ok, habs jetzt auch soviel minimiert und schreibs mal allgemein rein.


Code:
Klasse Objektname=new Klasse();
Objektname =new Klasse [Anzahl der Arrays] //wenn bekannt, ansonsten in Schleife wie oben beschrieben.
 
Zurück