IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: uspání vlákna v JFX

Aktivity
Avatar
buycry
Člen
Avatar
buycry:29.9.2014 8:11

Ahoj máte někdo zkušenosti jak uspat v FXku vlákno. Zkoušel jsem to přes TimerTask potom jsem na netu našel že by to mělo jít pomocí Application.in­vokeAndWait(); /*uspí se vlákno aplikace a provedou se následující příkazy*/
Bohužel ani jedno mi nefungovalo.
Jediné co mi funguje je prasárna kterou mám v tom programu abych viděl že ta metoda dělá co má.
Mám mainStage a potom vytvářím transparentní pauseStage kde volám metodu showAndWait(); /*zobrazí a počká než se okno zavře takže uspí mainStage*/
Ale bohužel při sekvenci několika kroků těsně za sebou (v podstatě animace) se mi přepíná focus na tu transparentní pauseStage takže ve výsledku mainStage se stává blikající okno (blikají okraje) a to nechci.
Nevíte někdo co s tím?
dík

 
Odpovědět
29.9.2014 8:11
Avatar
Matěj Kripner
Tvůrce
Avatar
Odpovídá na buycry
Matěj Kripner:29.9.2014 18:35

Nevím, jestli je zrovna vhodné pokoušet se uspat FX-vlákno. To se stará o refreshing okna a nějaká logika by měla být v jiném vlákně. Nicméně pokud chceš uspání na danou dobu, zkus metodu Thread.sleep(), která uspí vlákno ze kterého je volána na daný počet milisekund. Jinak poslouží metoda wait.

Editováno 29.9.2014 18:37
 
Nahoru Odpovědět
29.9.2014 18:35
Avatar
buycry
Člen
Avatar
Odpovídá na Matěj Kripner
buycry:29.9.2014 23:48

Thread.sleep(); jsem zkoušel a myslím že to vyhodilo RuntimeExeption.
Myslíš stage.wait()? Nejsem si ale asi jsem to zkoušel taky. Zítra ještě jednou zkusim obě možnosti co mi radíš a pak napíšu jak jsem dopadl.

 
Nahoru Odpovědět
29.9.2014 23:48
Avatar
Matěj Kripner
Tvůrce
Avatar
Odpovídá na buycry
Matěj Kripner:30.9.2014 14:02

Metodu wait nevoláš na instanci stage, ale na monitoru FX vlákna. Toto není záležitost tříd, ale vláken. Teď nejsem u pc, potom uvedu příklad.

 
Nahoru Odpovědět
30.9.2014 14:02
Avatar
Matěj Kripner
Tvůrce
Avatar
Odpovídá na buycry
Matěj Kripner:30.9.2014 16:39

Znovu upozorňuju, že uspávat FX vlákno není nejlepší nápad. Abych ale vysvětlil poslední příspěvek:
Monitor je objekt řídící synchronizaci vláken. Často se přirovnává ke krabičce, do níž se vejde právě jedno vlákno. A pouze vlákno, které monitor vlastní(které je právě v krabičce) může vykonávat synchronizované metody monitoru, nebo synchronizované bloky kódu využívající tento monitor. Např. tento kód:

synchronized(objekt) {
    System.out.println("V bloku synchronized");
}

Pokud vlákno na tento kód narazí, bude čekat, dokud objekt s názvem "objekt" nebude volný (dokud bude používán jinými vlákny jako monitor). Poté vstoupí do bloku synchronized a zabere si monitor pro sebe. Pokud jiné vlákno v tu dobu narazí na jakýkoliv blok synchronized vedený tím samým monitorem("ob­jekt"), bude čekat, dokud toto vlákno nevystoupí ze svého bloku a uvolní monitor.
A vtip je v tom, že pomocí monitoru mohou vlákna, která ho používají navzájem komunikovat. Teď pozor - Pokud vlákno v synchronizovaném bloku zavolá metodu wait() na tom monitoru, který blok synchronized využívá, bude čekat do té doby, než jiné vlákno vstoupí do synchronized bloku s tím samým monitorem a na tom samém monitoru zavolá metodu notify() nebo notifyAll(). To probudí první vlákno, které může vesele pokračovat ve své činnosti.
Ve skutečnosti je to trochu složitější a je potřeba si dávat bacha na různé věci, ale tohle by mělo stačit :)

 
Nahoru Odpovědět
30.9.2014 16:39
Avatar
buycry
Člen
Avatar
Odpovídá na Matěj Kripner
buycry:30.9.2014 20:31

Děkuju tohle by mohlo vyřešit můj problém. Zítra se k tomu konečně dostanu tak napíšu. S tím synchronized jsem nikdy nepracoval tak se něco nového i přiučím :)

 
Nahoru Odpovědět
30.9.2014 20:31
Avatar
Matěj Kripner
Tvůrce
Avatar
Odpovídá na buycry
Matěj Kripner:5.10.2014 17:40

Jak jsi na tom?

 
Nahoru Odpovědět
5.10.2014 17:40
Avatar
buycry
Člen
Avatar
Odpovídá na Matěj Kripner
buycry:7.10.2014 19:07

Bohužel počítač mi odešel díky zkratu do křemíkového nebe takže teď mám nový a ještě jsem se k tomu nedostal....do konce týdne se snad dostanu k tomu abych to stáhl z gitu a pak napíšu

 
Nahoru Odpovědět
7.10.2014 19:07
Avatar
buycry
Člen
Avatar
Odpovídá na Matěj Kripner
buycry:7.10.2014 19:07

Bohužel počítač mi odešel díky zkratu do křemíkového nebe takže teď mám nový a ještě jsem se k tomu nedostal....do konce týdne se snad dostanu k tomu abych to stáhl z gitu a pak napíšu

 
Nahoru Odpovědět
7.10.2014 19:07
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.