Avatar
Petr Kasnal
Člen
Avatar
Petr Kasnal:

Zdarec lidi mám dotaz není to nic těžkého ale nechápu proč mi to nefugnuje. Je to úplně jednoduchý prográmek, který hned pochopíte. De o otevření nové stage a nevím proč nefunguje mi to.... Předem děkuju za každou pomoc :)

Odkaz na stažení programu: http://files.uloziste.com/…5d9c0e7bde7/

 
Odpovědět 20. února 13:26
Avatar
pocitac770
Redaktor
Avatar
Odpovídá na Petr Kasnal
pocitac770:

Tak snad nebudu říkat blbosti...
Když loaduješ .fxml soubor, tak se načte rozvržení okna z onoho souboru (v tvém případě FXMLDocument2­.fxml), a v něm je odkaz na třídu Controlleru (FXMLDocument2Con­troller). Po vytvoření se v něm zavolá metoda initialize(), která zajišťuje "přípravné práce" po vytvoření základního dokumentu. Protože nemáš ve třídě implementované rozhraní Initializable, tudíž tam ani nemáš onu metodu, tak se ti okno nemůže ani načíst. Spíš doporučuji používat předdefinované FXML soubory (v nabídce přidání souboru je možnost "Empty FXML", po zaškrtnutí jedné z možností se ti vygeneruje i Controller), jejichž okna budeš inicializovat z vnější třídy, jako to ty děláš zde přes metodu (což jsem ani moc nepochopil, jestli to vůbec jde včetně získání požadované instance Controlleru "obklikou"). I když já osobně používám

Parent root = FXMLLoader.load(getClass().getResource("Okno.fxml"));
 
Nahoru Odpovědět 20. února 22:12
Avatar
Petr Kasnal
Člen
Avatar
Odpovídá na pocitac770
Petr Kasnal:

Takže se to dělá v initializable ? A jak to tedy bude vypadat ? Promin začínám v tom takže jsem trochu pomalejší, klidně mi sem pošli kód

 
Nahoru Odpovědět 20. února 23:13
Avatar
Odpovídá na Petr Kasnal
Petr Štechmüller:

Ahoj, kdyby jsi alespoň trošku pogooglil, tak vyřešíš problém hned. Nevím, jak Netbeans zobrazuje chyby, ale v IntelliJ byla chyba vypsaná jasně:

javafx.fxml.LoadException: Controller value already specified.

Po vyhledání této vyjímky na googlu mi hned na prvním odkazu vylezlo řešení.
Řešení: Když ve druhém kontroleru definuješ kontroler pomocí metody:

fxmlLoader.setController(this);

tak nemůžeš mít tento kontroler definovanej ještě ve FXML dokumentu. Tedy v souboru

FXMLDocument2.fxml

musíš smazat toto:

fx:controller="zkouseniblbosti2.FXMLDocumentController2"

a vše bude fungovat správně.

To pocitac770 metoda initialize se implementuje pouze tehdy, když si usmyslíš, že chceš implementovat rozhraní Initializable a potřebuješ vykonat nějaké věci těsně po inicializaci okna. Toto rozhraní nehraje žádnou roli co se týče načítání okna.

Snad to pomohlo...

Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
Nahoru Odpovědět 20. února 23:26
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
Petr Kasnal
Člen
Avatar
Odpovídá na Petr Štechmüller
Petr Kasnal:

Super diky moc funguje :) A hele nejde to ještě nějak jednodušeji klidně ? Já jsem todle vyplodil ve své hlavě :D

 
Nahoru Odpovědět 20. února 23:36
Avatar
Odpovídá na Petr Kasnal
Petr Štechmüller:

Maximálně mně napadá si na to vytvořit nějakou statickou metodu v pomocný třídě, kterou budeš volat vždy, když chceš vytvořit nový okno. Nic jinyho mně nenapadá...
Btw, můžeš tu odpověď označit jako řešení tvého dotazu...

Nahoru Odpovědět 20. února 23:44
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
Petr Kasnal
Člen
Avatar
Odpovídá na Petr Štechmüller
Petr Kasnal:

Jojo jasnačka já právě jenom jestli to nědelam blbě :p Díky moc za vyřešení mého problému :)

 
Nahoru Odpovědět 20. února 23:50
Avatar
pocitac770
Redaktor
Avatar
Odpovídá na Petr Štechmüller
pocitac770:

Neměl jsem zrovna po ruce IDE, a kouknul jsem se jen na zdroják, tak mě nenapadla až tak zvláštní chyba jako toto :D
A s tím Initializable... Právě jsem myslel, že se nutně automaticky volá při načtení... Tak alespoň zase o znalost víc, že to jde i bez toho :)

Editováno 21. února 1:10
 
Nahoru Odpovědět 21. února 1:09
Avatar
Odpovídá na pocitac770
Petr Štechmüller:

Jasný, zkus se podívat do zdrojaku javy, jak je to s tím initializable. Zjistís, že je tam nějaká podminka typu:

if(controller instanceof Initializable)
 volej nad kontrolerem metodu initialize
Nahoru Odpovědět 21. února 8:23
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 9 zpráv z 9.