Ho una domanda su multi-threading e l'associazione di una StringProperty.Errore multi-threading durante il binding a StringProperty
Ho una classe CacheManager
, che contiene uno Thread
che aggiorna la cache con le modifiche sul server. Ora, voglio notificare all'utente un testo e una percentuale del progresso (che sono uno Label
e ProgressBar
in JavaFX). Io uso statico pubblico DoubleProperty
e StringProperty
per questo, che sono definiti nella classe CacheManager
. Ho appena legano in questo modo:
progressBar.progressProperty().bind(CacheManager.progress);
someLabel.textProperty().bind(CacheManager.status);
Ora, nel thread Updater, aggiorno questi Properties
. Con DoubleProperty
funziona perfettamente e lo ProgressBar
mostra perfettamente i progressi. Tuttavia, l'aggiornamento del Label
con lo stato (che è il testo dal StringProperty
) genera un errore: java.lang.IllegalStateException: Not on FX application thread; currentThread = Thread-9
Ora, la mia domanda è: Perché il lavoro DoubleProperty
bene, mentre il StringProperty
tiri un errore? Qual è la differenza tra loro che considerano il multi-threading?
Tutte le idee su una riprogettazione sono anche benvenute e qualsiasi aiuto è molto apprezzato!
Hai cercato il motivo "IllegalStateException: Non sul thread dell'applicazione FX"? –
Ho appena gettato l'errore nell'aggiornamento 'Thread', quando provo a modificare il testo per la seconda volta. Quindi su questa riga: 'status.set (" Aggiornamento ... ")' – bashoogzaad
I * bet * è perché la skin di 'ProgressBar' imposta un' InvalidationListener' su 'progressProperty', mentre la skin di' Label' imposta un listener di modifiche su 'textProperty'. Nonostante il comportamento di 'progressBar.progressProperty' sia più conveniente, penso che il comportamento di' Label.textProperty' sia più conciso con il fatto che tutte le modifiche all'interfaccia utente devono aver luogo nel thread dell'interfaccia utente. Usa 'Platform.runLater()' o considera la classe 'javafx.concurrent.Service' di JavaFX, che offre le funzionalità che desideri. –