Compteur de temps textField
Fermé
imane
-
Modifié par NHenry le 18/03/2016 à 23:29
greg6614 Messages postés 592 Date d'inscription vendredi 7 août 2009 Statut Membre Dernière intervention 3 juin 2017 - 19 mars 2016 à 12:52
greg6614 Messages postés 592 Date d'inscription vendredi 7 août 2009 Statut Membre Dernière intervention 3 juin 2017 - 19 mars 2016 à 12:52
A voir également:
- Compteur de temps textField
- Compteur électrique - Guide
- Comment ralentir un compteur linky forum - Accueil - Objets connectés
- Blocage agriculteur carte en temps réel - Accueil - Transports & Cartes
- Compteur de contractions - Télécharger - Santé & Bien-être
- Renommer plusieurs fichiers en même temps - Guide
1 réponse
greg6614
Messages postés
592
Date d'inscription
vendredi 7 août 2009
Statut
Membre
Dernière intervention
3 juin 2017
107
19 mars 2016 à 12:52
19 mars 2016 à 12:52
Salut,
quand tu veux faire une modification sur ton IHM tu dois penser à une règle simple : TOUS les changements graphiques doivent être effectué dans l'EDT (Event Dispatch Thread).
Il est fondamental de bien comprendre ça. Quand tu lances un programme JAVA en mode console, deux Threads sont créés : un Thread principal pour empiler les instructions de ton programmes jusqu'à la fin et un pour les tâches de fond comme des lancements de nouveaux Threads par exemple.
En graphique, un troisième Thread est lancé, c'est l'EDT qui s'occupe de tous les changements graphiques.
Quand tu fais un appel à une méthode
Pour utiliser l'EDT il y a la classe SwingUtilities (je t'invite à consulter sa JavaDoc) qui permet d'insérer du code dans l'EDT.
Il y a également la classe SwingWorker<T,V> qui est une classe abstraite qui permet d'effectuer des tâches de fond tout en dialoguant avec l'EDT. Comme c'est une classe abstraite tu dois redéfinir la métode
Avec tous ces éléments tu devrais pouvoir comprendre pourquoi ça ne marche pas. Après sache que le petit but de code que tu nous as fournis n'aide pas vraiment, si l'on a pas la structure complète dans laquelle ton JTextField est instancié.
quand tu veux faire une modification sur ton IHM tu dois penser à une règle simple : TOUS les changements graphiques doivent être effectué dans l'EDT (Event Dispatch Thread).
Il est fondamental de bien comprendre ça. Quand tu lances un programme JAVA en mode console, deux Threads sont créés : un Thread principal pour empiler les instructions de ton programmes jusqu'à la fin et un pour les tâches de fond comme des lancements de nouveaux Threads par exemple.
En graphique, un troisième Thread est lancé, c'est l'EDT qui s'occupe de tous les changements graphiques.
Quand tu fais un appel à une méthode
actionPerformed, son contenu est exécuté dans l'EDT. Problème, s ton traitement est long, toute ton IHM sera figée (peut être as-tu déjà eu un soucis similaire avec un cas classique comme l'incrémentation d'une JProgressBar)
Pour utiliser l'EDT il y a la classe SwingUtilities (je t'invite à consulter sa JavaDoc) qui permet d'insérer du code dans l'EDT.
Il y a également la classe SwingWorker<T,V> qui est une classe abstraite qui permet d'effectuer des tâches de fond tout en dialoguant avec l'EDT. Comme c'est une classe abstraite tu dois redéfinir la métode
doInBackground()pour l'utiliser.
Avec tous ces éléments tu devrais pouvoir comprendre pourquoi ça ne marche pas. Après sache que le petit but de code que tu nous as fournis n'aide pas vraiment, si l'on a pas la structure complète dans laquelle ton JTextField est instancié.