Je fais une application dans netbeans et je veux avoir une étiquette de statut qui indique ce qui se passe dans le programme à un moment donné. Il y a une tonne de code, mais voici à peu près ce qu'il fait: prétendre que statusLabel est une étiquette qui a déjà été placée dans le programme et que chacune des fonctions est une fonction coûteuse qui prend quelques secondes.Comment mettre à jour une étiquette pour qu'elle affiche le nouveau texte?
statusLabel.setText("Completing Task 1");
System.out.println("Completing Task 1");
this.getFrame().repaint(); //I call this function and the two functions below it but the label still does not change.
statusLabel.updateUI(); //Doesn't seem to do much.
statusLabel.revalidate(); //Doesn't seem to do much.
this.completeTask1();
statusLabel.setText("Completing Task 2");
System.out.println("Completing Task 2");
statusLabel.revalidate();
this.getFrame().repaint();
...
Ceci continue jusqu'à ce que l'interface utilisateur ait terminé 4 tâches. Pendant tout le processus, l'étiquette ne se met pas à jour avant que chaque tâche n'ait été complétée, et ensuite il est écrit «Achèvement de la tâche 4». Les appels System.out.println fonctionnent parfaitement bien. Fondamentalement je me demande ce que je devrais faire pour que l'étiquette montre le nouveau texte qui a été mis en place.
Cela nécessite un multi-threading. Votre label ne se met pas à jour car votre seul thread est utilisé pour exécuter l'autre code qui s'exécute dans le "background", jusqu'à ce qu'il soit terminé, votre interface graphique ne sera pas mise à jour. Un problème courant lorsque le multithread n'est pas utilisé quand il le faut. Voici le tutoriel Java Oracle sur [Concurrency] (http://docs.oracle.com/javase/tutorial/essential/concurrency/), il a tout ce qu'il faut savoir sur le multi-threading pour résoudre votre problème et est parfait pour commencer à apprendre l'un des concepts de programmation les plus difficiles et les plus nécessaires. http://docs.oracle.com/j – CODe