Y at-il une possibilité d'afficher un indicateur de progression (tournant, non coincé) alors qu'il ya un gros soulèvement fait dans le fil ui javafx? J'ai besoin de charger une tableView assez grande dans un TitledPane (ce qui prend plusieurs secondes). La commande qui fait tout le décalage est TitledPane.setContent (myTableView). Donc, je veux au moins montrer une animation de chargement ou un indicateur pendant ce temps.Show ProgressIndicator lors d'un travail intensif dans le thread GUI doit être fait
Alors im en ce moment à faire ce qui suit, pour donner le fil ui assez d'espace pour respirer pour montrer mon animation de chargement avant de faire l'appel coûteux:
showMyLoadingAnimation();
PauseTransition pause = new PauseTransition(Duration.seconds(1));
pause.setOnFinished(event -> {
setContent(myTableView);
});
pause.play();
dismissMyLoadingAnimation();
cela fonctionne obtenir l'indicateur de progression montré, mais une fois que la Le thread ui commence à travailler sur setContent, il se bloque. Ive vu certaines personnes utilisant swing pour afficher une escale ou un dialogue avec l'animation juste pour l'avoir fonctionné dans un fil différent et ne pas rester bloqué, mais ne pouvait pas trouver une solution convaincante pour le moment.
EDIT: Ok, j'ai trouvé cette racine du problème. donc ive got tables prefHeightProperty lié à la taille de la liste son affichage comme indiqué ici: JavaFX - Adapt TableView height to number of rows fait il ya des semaines, travaillé, oublié à ce sujet.
qui coûte BEAUCOUP de temps. Donc, bien que le timing de l'appel lors de la définition de la liaison ne montre pas que cela prend beaucoup de temps, le thread ui semble avoir un gros problème avec quand les tableaux deviennent gros.
grâce à James, sa réponse sera la bonne pour la plupart des gens qui se heurtent à ce genre de problème.
quelqu'un peut-il s'il vous plaît commenter cette question là-bas: JavaFX - Adapt TableView height to number of rows (puisque c'est la première question que je n'ai pas encore assez représentant pour commenter.)
'titledPane.setContent (myTableView)' ne peut raisonnablement prendre un traitement temps appréciable. Quelque chose d'autre qui se passe dans le code prend le temps; probablement charger les données. Vous devez déplacer le travail qui prend du temps (ce qui n'est pas l'interface utilisateur réelle) vers un thread d'arrière-plan. –