Java: Minuterie (attendre x secondes)
J'ai une interface utilisateur graphique simple qui peut sauver et d'obtenir certaines données d'un .fichier doc.
Lorsque j'appuie sur un bouton enregistrer, j'ai une étiquette qui dit "Succès" ou "Erreur" sur les étiquettes.setText();
Mise à jour: Le code est destiné à être exécuté dans un FXMLDocumentController (construit på SceneBuilder)
Je veux l'étiquette afin de retourner à être vide ("") après 3 secondes..
J'ai essayé:
try {
Thread.sleep(1000);
}
catch(InterruptedException ex) {
Thread.currentThread().interrupt();
}
mais est-ce que le sommeil-fonction gèle l'ensemble de l'interface graphique, donc je ne peux pas interagir avec lui pendant qu'il dort. Comment puis-je configurer un minuteur qui n'affecte pas la convivialité? 🙂
Vous devez vous connecter pour publier un commentaire.
Créer un TimerTask qui est commencé après 3 secondes.
Cette TimerTask a pour exécuter le code qui utilise les composants gui via la Plate-forme.runLater(new Runnable())
Vous pouvez lancer un autre thread pour gérer cela. Il suffit de faire votre traitement dans l'autre thread. Dormir pendant 3 secondes, puis désactivez la lbl.
Voici un exemple montrant comment cela fonctionne:
************************************************************UPDATE*************************************************************
Ne pas utiliser
Thread.sleep()
. Instancier unjavax.swing.Timer
et ont-il faire un rappel d'événement. Si vous voulez le garder dans la même méthode, appelwait()
, et alors le gestionnaire d'événement d'appelnotify()
, qui va reprendre le programme. Cependant, vous n'avez probablement pas besoin de le faire; vous pouvez simplement supprimer le texte directement à l'aide du gestionnaire d'événement.Pour ce faire, vous devrez utiliser filetage. Dans le cas où vous êtes en utilisant Swing vous pouvez utiliser un Swing Timer. Le code devrait ressembler à quelque chose comme ça. Mettez ce code là où vous êtes "sauver" le fichier.
Votre problème est votre bloque le thread d'INTERFACE utilisateur. Il ne peut pas mettre à jour quoi que ce soit et la boucle principale de pauses. Vous pouvez atteindre votre objectif avec un
timer
objet comme les autres ont répondu, ou si vous ne voulez pas vous pouvez implémenter votre propre thread à faire de même.Vous ne pouvez pas interagir avec l'interface graphique car le code est de dormir dans l'event dispatch thread qui est responsable du traitement de GUI événements et il est donc bloqué. Utilisez cette Balançoire Minuterie à la place.
L'exemple donné, il est simple. - Je inclure les commentaires.