Nullpointer Exception in Array

Battlestr1k3

Mitglied
Da ich mich seit einiger Zeit hier im Forum rumtreibe und sehe, dass einem hier sehr kompetent und freundlich geholfen wird, wende ich mich wegen meines Problems mal an Euch.

Und zwar habe ich das Problem, dass wenn ich empfangene Daten in ein Array speichern will ich einen NullPoint Exception in der Zeile
Java:
clients.put(uid, name);
bekomme.
Es liegt wahrscheinlich an uid, welches aber eigentlich ok zu schein seint (uid ist eine Zahl, wird aber als String in den Array eingefügt; zumindest theoretisch :bahnhof🙂.
Könnt ihr mir helfen und mir sagen, was ich falsch mache?

Mfg,
Battlestr1k3


Java:
Vector<HashMap<String, String>> dataClientList = query.getList(ServerQuery.LISTMODE_CLIENTLIST, "-info,-times");
	      
	      if (dataClientList != null)
				{
	    	  int i = 0	;
					
					
					for (HashMap<String, String> hashMap : dataClientList)
					{
						outputHashMap(hashMap);
							     
					     recvclients(hashMap.get("client_nickname"),hashMap.get("clid"),"KA" );
					        
						
						
						i=i+1;
					}
}}
void recvclients(String name,String uid,String cid)
	{
	     
	     
		clients.put(uid, name);
		
	}
 
Ich seh in dem Beispiel keine Arrays. Wahrscheinlich ist "clients" einfach null. Wo wird das zugewiesen? Lass dir die Variable doch mal ausgeben.
 
Oh, ich vergas Clients zu posten:
Also ich definiere es am Anfang der Datei so, ich habe zur Zeit es mit einer Hashmap versucht, hier jedoch das gleiche Problem:
Java:
HashMap<String,String> clients;
 
Hast du auch das clients-Objekt irgendwo erzeugt ?
[c]HashMap<String,String> clients = new HashMap<String, String>();[/c]

oder eben den Array ?
[c]String clients[] = new String[10]; // da passen dann aber maximal 10 einträge rein !!![/c]
 
Egal ob HashMap oder String-Array, eine Variable (von primitiven Typen abgesehen) hat den Inhalt [c]null[/c] wenn sie nicht initialisiert ist. Und ein Zugriff darauf null führt zwangsläufig zu einer NullPointerException. Du musst also an geeigneter Stelle das Array oder die Map erzeugen, z.B. durch [c]clients=new String[n][/c] oder [c]clients=new HashMap();[/c]
 
Boah, was fürn dummer Fehler.
Vielen vielen Dank für die super schnelle Hilfe.
Wieso muss man das bei normalen strings eigentlich nicht machen?

Mfg,
Battlestr1k3
 
Strings sind die Ausnahme, schlicht weil sie so häufig verwendet werden und andere Sprachen früher auch schon Strings ohne Objekte hatten. Andauernd new String schreiben zu müssen wäre recht nervig. Das wird einem deswegen von der Sprache abgenommen.
 
Wobei dieses Stück Code - sofern in einer Methode stehend - gar nicht kompiliert werden dürfte. Nur Klassenvariablen werden bei einer "nicht-Instantiierung" auf den Defaultwert (null, 0, false, ...) gesetzt.
 
ja korrekt in einer Methode kompiliert es nicht und als Klassen Variable ist es null (ebenfalls als static Attribut).

Wollte nur nocheinmal herausstreichen , dass sich hier die Klasse String nicht anders verhält wie jede andere Klasse, da ich die Aussage aus meinem vorherigen Zitat so aufgefasst habe. (Und wollte mir auch ein wenig Tipparbeit ersparen, und hab daher nur so einen oberflächlichen Code geschreiben)
 
Der einzige Unterschied ist, dass Java dem Programmierer das Schreiben von new abnimmt und es automatisch erledigt.
Was man an der Performance bei Schleifen mit String x + "test" ja auch gut zeigt und die Notwendigkeit der StringBuilder-Klasse erklärt.
 
Der einzige Unterschied ist, dass Java dem Programmierer das Schreiben von new abnimmt und es automatisch erledigt.
Das gilt für Stringliterale, der Kompiler optimiert da aber noch mehr.

Was man an der Performance bei Schleifen mit String x + "test" ja auch gut zeigt und die Notwendigkeit der StringBuilder-Klasse erklärt.
Hat nix mit Compileroptimierungen von Stringliteralen zu tun, sondern damit, dass String immutable ist und der StringBuilder die mutable "companion class" dazu, der Compiler "optimiert" jedes + von Strings zu StringBuilder, in schleifen ist das nicht so dolle manchmal.
 

Neue Themen


Zurück
Oben