Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno JavaFX - StackPane - add children outside constructor problem

Dobrý den,

Když vytvořím StackPane a v konstruktoru do něj přidám potomka,

getChildren().add(new Number(10)); Number je třída zděděná z Label. 

tak vše funguje.

Avšak když ho tam chci dat až po vytvoření,

list_of_stackPane.get(0).getChildren().add(new Number(10)); 

tak program zhavaruje na NullPointerException.

Pole vrací existující prvek, getChildren() v obou případech vrátí prázdné pole a v třídě Number taky problém není, jelikož se v konstruktoru bez problém vytvoří.

Nevíte, prosím Vás, proč to nefunguje?

Děkuji

Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
Nevime, ale kdybychom pouzili debugger vedeli bychom. Neco tam musis mit null, bud vysledek get(0)…
MaSo 23.05.2018 08:48
MaSo
getChildren() v obou případech logicky vrací prázdné pole. A get(0) nevrací null, takže první prvek…
MichalDM 23.05.2018 09:36
MichalDM
Tak sem dej cely stacktrace te exception a vice kodu. Z jednoho radku opravdu nikdo nepozna v cem je…
MaSo 23.05.2018 10:05
MaSo
try { System.out.println(list_of_stackPane.get(0).toString()); System.out.println(list_of_stackPane.…
MichalDM 23.05.2018 13:51
MichalDM
A ten stacktrace?
MaSo 23.05.2018 14:24
MaSo
Stacktrace? Asi myslíš StackPane? StackPane.html A vlastně, co konkrétně tou otázkou myslíš?
MichalDM 23.05.2018 15:05
MichalDM
Catchni tu exception a zavolej na ni printStackTrace() a pastni sem vysledek... try { System.out.pr…
MaSo 23.05.2018 16:21
MaSo
To řešení co jsem použil je špatné, už jsem to změnil, ale problém byl tenhle. Potom, co jsem vytvo… poslední
MichalDM 25.05.2018 23:29
MichalDM
try {
    System.out.println(list_of_stackPane.get(0).toString());
    System.out.println(list_of_stackPane.get(0).getChildren().toString());
    list_of_stackPane.get(0).getChildren().add(new Number(10));
} catch (Exception e) {
    System.out.println(e.getMessage());
}

Když pole neinicializuji, tak to zhavaruje hned na začátku a vypíše. Index (0) is greater than or equal to list size (0)

Pole mám ale inicializované, takže to vypíše.

1. řádek - Material@54461fde
2. řádek - []
3. řádek - zhavaruje a vypíše null

Catchni tu exception a zavolej na ni printStackTrace() a pastni sem vysledek...

try {
    System.out.println(list_of_stackPane.get(0).toString());
    System.out.println(list_of_stackPane.get(0).getChildren().toString());
    list_of_stackPane.get(0).getChildren().add(new Number(10));
} catch (Exception e) {
    System.out.println(e.printStackTrace());
}

To řešení co jsem použil je špatné, už jsem to změnil, ale problém byl tenhle.

Potom, co jsem vytvořil pole třídy StackPane, jsem nastavil null je statický field, který určoval jeho velikost, kterou jsem dříve vypočítal.

Teprve potom jsem jim všem začal vytvářet child třidy Number. Jenže jejich velikost byla závislá na statickém fieldu třídy, který se incializoval až při prvním zavolání a nastavil velikost písma právě podle fieldu StackPane.

Ten však v té době neexistoval, proto se to v debug módu nedostalo ani do konstruktoru a proto to taky přímo v konstruktoru StackPane fungovalo.

Zpět do poradny Odpovědět na původní otázku Nahoru