java.lang.NullPointerException at java.util.LinkedList.writeObject

Vogi

Aktives Mitglied
Hallo,
ich versuche zwischen einem Server und einem Client Objekte zu verschicken, dies mache ich folgendermaßen:

Java:
for(;;){
				Thread.sleep(0);
				if(zuVerschickendes.size() > 0){
					objectOutputStream.writeObject(zuVerschickendes.get(0));
					objectOutputStream.reset();
					zuVerschickendes.removeFirst();
                                }
}

Dies funtkioniert auch meistens tadellos, manchmal kommt aber plötzlich folgende Exception:

java.lang.NullPointerException at java.util.LinkedList.writeObject
...

Was hat dies zu bedeuten?
 
kann eigentlich nicht sein, ich adde zu der Liste nie ein null-Objekt, und es scheitert, wie ich getestet habe auch einer der Prüfung : if(zuVerschickendes.get(0) != null) vor dem writeObject
 
Schau doch einfach in den Stacktrace.. der verrät dir in welcher Zeile die NPE auftritt. Dann benutzt du den debugger und schaust welche Variable, bzw. welcher Aufruf in dieser Zeile "null" ist/ergibt.

Versteh nicht so recht warum eine NPE immer solche Fragen und unklarheiten mit sich bringt....?! ???:L
 
naja, das Problem ist, das diese NullPointerException nur etwas ein mal in einer halben Stunde Laufzeit auftritt. Mit dem Debugger habe ich noch keine Erfahrung, aber ich werde mir ihn nun mal anschauen.
 
Ich tippe mal: es könnte am nicht synchronisierten Zugriff auf die Liste liegen; die Liste wird ja offenbar aus einem anderen Thread heraus befüllt.
 
Das denke ich auch, nimm mal eine ConcurrentLinkedQueue, damit gibts das Problem bestimmt nicht mehr ...
Dann könntest du dir auch diese doofe endlos-Schleife sparen 😀 Thread.sleep(0) macht nix, das ist dir schon klar, oder ?
 
danke mal für eure antworten, es scheint funktionieren, auch wenn ich das natürlich noch nicht ganz sicher sagen kann. Das mit der Endlosschleife ist aber immer noch nötig, da es ja auch manchmal vorkommt, das die Liste für einige Zeit leer und erst dann wieder gefüllt wird, oder wie hast du das gemeint?
 
Ich meinte eigentlcih die LinkedBlockingQueue, sry.. Name eiskalt verwechselt... LinkedBlockingQueue hat die Methode take().
Wenn die liste leer ist, schläft der Thread solange bis ein Element in die Liste kommt... Endloschleife bringt 100% CPU Last.. Bzw. 25% auf einem Quadcore, aber das kann nicht gewollt sein 😀
 

Neue Themen


Zurück
Oben