Diskuze: Vlákno v FX
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 5 zpráv z 5.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.
Asi bych prvně zkusil synchronizovat to rotate.setAngle(...) přes Platform.runLater().
jj synchronizace mě taky napadla, nepomohlo to (navíc, používám tam jen jedno vlákno, takže i tak to byl asi zoufalý pokus). Nicméně tu metodu Platform.runLater() neznám, řekl bys mi ve stručnosti její smysl?
Ahoj, jak jistě víš, tak JavaFX handluje akce přes frontu zpráv (jako
každý GUI framework).
Když zavoláš metodu
rotate.setAngle(angle++);
z jiného než JavaFX vlákna, tak hrozí, že dojde ke kolizi, jejíž
výsledkem je v tomto případě zaseknutí ručičky.
Nebo jiný příklad: z jiného vlákna nemůžeš nastavovat hodnotu textboxu,
to zařve rovnou.
Jako řešení je právě zavolat metodu Platform.runLater, která jako parametr bere rozhraní Runnable. Jak už název metody napovídá, kód, který se pošle do metody jako parametr se vykoná "někdy později". To někdy později je v tomto případě ve chvíli, kdy na tento kus kódu dojde řada ve frontě zpráv, kterou si ale už obstarává JavaFX vlákno. Tím se zajistí, že nedojde k nekonzistenci a ručička se správně otočí.
Více info na stackoverflow
Případně javadoc
díky, oba tedy doporučujete to samé, hned na to jdu. Škoda,že nemůžu dát fajfku oběma
Zobrazeno 5 zpráv z 5.