Non me ne intendo granché di JavaFX ma il threading è molto simile a quello di Swing: esiste un singolo e unico thread dedicato alla UI, in Swing è convenzionalmente chiamato Event Dispatch Thread (EDT), in JavaFX se non sbaglio viene chiamato il "JavaFX application thread".
Questo tipo di thread si occupa in generale del dispacciamento degli eventi e della gestione dei componenti (in Swing in questo contesto vengono disegnati i componenti, in JavaFX non ne sono certo).
Comunque il punto è che il thread della UI NON va mai tenuto "impegnato" con del proprio codice, altrimenti la UI è "congelata" poiché il framework della UI (Swing o JavaFX che sia) in quel periodo di tempo non può riavere il controllo e quindi procedere con altri eventi, painting, ecc..
La soluzione non è banale: il multi-threading. Direttamente al livello più basso (Runnable/Thread) oppure con astrazioni di più alto livello se/come offerte dal framework della UI. In Swing esiste lo SwingWorker (da Java 6), in JavaFX non so ora se c'è un equivalente.
Ma il punto è che bisogna avere le idee chiare sul multi-threading: sincronizzazione, mutua-esclusione, visibilità delle modifiche tra i thread, locking, meccanismi di wait/notify, ecc... Senza questi concetti non si va molto lontano ..![]()


Rispondi quotando
