

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
Nevime, ale kdybychom pouzili debugger vedeli bychom.
Neco tam musis mit null, bud vysledek get(0) nebo getChildren()...
getChildren() v obou případech logicky vrací prázdné pole. A get(0) nevrací null, takže první prvek pole je deklarovaný.
Tak sem dej cely stacktrace te exception a vice kodu. Z jednoho radku opravdu nikdo nepozna v cem je problem...
Taky si to muzes debuggovat az do JDK, abys videl kde presne to padne...
PS: jestli uvidim jeste jednu promennou s podtrzitky asi umru...
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
A ten stacktrace?
Stacktrace? Asi myslíš StackPane? StackPane.html A vlastně, co konkrétně tou otázkou myslíš?
Catchni tu exception a zavolej na ni printStackTrace() a pastni sem vysledek...
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.