Pourquoi suis-je java.lang.IllegalStateException “Pas sur FX application thread” sur JavaFX?
J'ai une application qui a un TableView
qui a un joint auditeur afin qu'il actualise dès qu'il détecte un changement, mais le truc c'est que je suis de java.lang.IllegalStateException: Not on FX application thread; currentThread = Smack Listener Processor (0)
.
Voici mon code:
/**
* This function resets the pagination pagecount
*/
public void resetPage() {
try {
System.out.println("RESET");
int tamRoster = this.loginManager.getRosterService().getRosterList().size();
paginationContactos.setPageCount((int)(Math.ceil(tamRoster*1.0/limit.get())));
int tamEnviados = this.loginManager.getRosterService().getEnviadasList().size();
paginationEnviadas.setPageCount((int)(Math.ceil(tamEnviados*1.0/limit.get())));
int tamRecibidas = this.loginManager.getRosterService().getRecibidasList().size();
paginationRecibidas.setPageCount((int)(Math.ceil(tamRecibidas*1.0/limit.get())));
} catch (Exception e) {
e.printStackTrace();
}
}
public void doSomething () {
this.loginManager.getRosterService().getRosterList().addListener(new ListChangeListener<RosterDTO>() {
@Override
public void onChanged(
javafx.collections.ListChangeListener.Change<? extends RosterDTO> c) {
//TODO Auto-generated method stub
resetPage();
while (c.next()) {
if (c.wasPermutated()) {
System.out.println("PERM");
} else if (c.wasUpdated()) {
System.out.println("UPD");
} else {
System.out.println("ELSE");
}
}
}
});
}
Bien qu'il entre dans le resetPage méthode, j'obtiens cette exception.
Pourquoi est-ce arrivé?
Comment puis-je résoudre ce problème?
Merci à l'avance.
Vous devez vous connecter pour publier un commentaire.
L'interface utilisateur ne peuvent pas être directement mis à jour à partir d'un non-application thread. Au lieu de cela, utiliser
Platform.runLater()
, avec la logique à l'intérieur de l'objet Praticable. Par exemple:Comme une expression lambda:
Platform.runLater();
sera JavaFX fil? comme vous l'avez mentionné.JavaFX code permet de mettre à jour l'INTERFACE utilisateur à partir d'un JavaFX application thread. Mais l'exception ci-dessus le message qu'il dit qu'il n'est pas à l'aide de FX thread d'Application.
Une façon de le résoudre est de lancer un FX thread d'Application de la resetPage méthode et de faire des modifications de là.