Nullpointerexception bei toArray()

Jose05

Aktives Mitglied
Hallo,
bei folgender Zeile bekomme ich eine Nullpointerexception:
[CODE lang="java" title="Code"] Label[] lbl = (Label[]) gp.getChildren().toArray();
[/CODE]
gp ist ein GridPane auf dem nur Labels sind.

Könnte mir jemand helfen?
 
Ohne weitere Informationen werden wir Dir kaum helfen können. Vermutlich ist gp bei Dir null.
 
Du kannst dem Fehler selbst auf den Grund gehen und erst mal heraus finden, was denn die NPE wirft. Meine Vermutung kennst Du ja.
Dann musst Du schauen, wo und wie die Variable initialisiert werden sollte um zu schauen, was schief gelaufen ist.

Wenn wir dir helfen sollen, müsstest Du uns deutlich mehr vom Code zeigen: Wo ist die Variable deklariert worden, wo wurde diese initialisiert. Was ist der genaue Stacktrace der NPE? Was machst Du in deinen Methoden, die im Stacktrace auch enthalten sind?
 
Der cast wird so aber nicht funktionieren, das gibt ein Objekt-Array zurück, was nicht zu einem Label-Array gecasted werden kann
 
ok, hab mal wieder den Fehler gemacht, vor dem zweiten Kaffee am Morgen zu posten.
Dachte aus irgend einem Grund, dass der Compiler sich da aufregt.
So falsch lagst Du auch nicht. Der Compiler meckert ja auch schon, wenn klar ist, dass da etwas gar nicht sein kann.

Das führe ich auch einfach einmal im Detail aus (Nicht für Dich @Neumi5694 - Du wirst das vermutlich schon kennen und Dich längst erinnert haben! Aber für den TE ist das durchaus wichtig denke ich mal):

Wenn etwas eine Klasse A zurückgibt und du es nach Klasse B casten willst und die Klassen nicht voneinander erben, dann wird der Compiler da schon meckern. Konkretes Beispiel: Methode gibt ein Integer zurück und du machst ein Cast zu String: Bei Integer kann nichts zurück gegeben werden, das zu einem String gecastet werden kann (*). Das sind dann "incompatible Types":
java: incompatible types: java.lang.Integer cannot be converted to java.lang.String

Aber wenn die Klassen von einander erben, dann geht sowas natürlich. Integer erbt von Number. Also nehmen wir eine Methode, die ein Number[] zurück gibt. Diese kann dann z.B. ein Integer[] zurück geben:
public static Number[] test() { return new Integer[]{1}; }

Und ein Code wie:
Integer[] t = (Integer[]) test();
würde funktionieren.

Wenn man die Methode nun in folgendes umändert:
public static Number[] test() { return new Double[]{1.0}; }
dann ist die Methode weiter valide. Aber bei der Ausführung schlägt der Cast natürlich fehl, denn ein Double[] kann nicht in ein Integer[] gecastet werden.

(*) Die Null-Referenz ist hier natürlich eine Ausnahme. Aber die nimmt eine besondere Position ein, die ich aber nicht näher beleuchten werde. (Wenn das aber wirklich interessieren sollte, dann kann ich gerne einen separaten Thread mit den Stellen der JLS bringen und diese etwas ausführen. Aber das sind Formalien, die nicht wirklich interessant sind wenn man einfach nur etwas in Java programmieren will.)
 

Zurück
Oben