[JAVA] Mettre a jour variable dans boucle for
annisseur
-
annisseur -
annisseur -
Bonjour,
j'aimerais créer un bouton sur lequel s'affiche un temps qui baisse chaque seconde.
voici les créateurs du bouton:
et voici la boucle for avec un thread pour la mettre en pause:
mais lorsque je lance mon programme la valeur affichée sur le bouton ne baisse pas. Je pense que ça vient du fait que la variable secondes ne se met pas à jour.
Comment faire?
Merci
j'aimerais créer un bouton sur lequel s'affiche un temps qui baisse chaque seconde.
voici les créateurs du bouton:
int secondes;
JButton countdown = new JButton("temps restant:" +secondes);
countdown.setBounds(560,10,150,50);
countdown.setFocusable(false);
panneauPrincipal.add(countdown);
et voici la boucle for avec un thread pour la mettre en pause:
Thread s = new Thread() {
public void run() {
for (secondes = 300; secondes >= 0; secondes--) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};
s.start();
mais lorsque je lance mon programme la valeur affichée sur le bouton ne baisse pas. Je pense que ça vient du fait que la variable secondes ne se met pas à jour.
Comment faire?
Merci
A voir également:
- [JAVA] Mettre a jour variable dans boucle for
- Jeux java itel - Télécharger - Jeux vidéo
- Waptrick java football - Télécharger - Jeux vidéo
- Downloader for pc - Télécharger - Téléchargement & Transfert
- Mettre a jour chrome - Accueil - Applications & Logiciels
- Mise a jour windows 10 - Accueil - Mise à jour
1 réponse
La variable secondes se met bien à jour, mais elle est totalement indépendante du titre du bouton. Si tu veux modifier le titre avec la nouvelle valeur du temps il faut actualiser le titre à chaque fois :
Attention : si tu fais 300 pauses d'une secondes, ça ne fera pas 300 secondes à cause du temps entre les pauses. Le temps passé en paramètre de Thread.sleep est un temps minimal (sous réserve qu'il n'y ai pas d'interruption), mais en pratique ce sera supérieur, en particulier à causes des opérations que tu fais entre deux opérations (la mise à jour du bouton, le calcul de la boucle, etc.) mais aussi en fonction de la charge du processeur (ce que tu fais avec les autres threads qui peuvent être prioritaire).
for (secondes = 300; secondes >= 0; secondes--)
{
countdown.setText("temps restant:" +secondes);
try { Thread.sleep(1000); } catch (InterruptedException e) { }
}
Attention : si tu fais 300 pauses d'une secondes, ça ne fera pas 300 secondes à cause du temps entre les pauses. Le temps passé en paramètre de Thread.sleep est un temps minimal (sous réserve qu'il n'y ai pas d'interruption), mais en pratique ce sera supérieur, en particulier à causes des opérations que tu fais entre deux opérations (la mise à jour du bouton, le calcul de la boucle, etc.) mais aussi en fonction de la charge du processeur (ce que tu fais avec les autres threads qui peuvent être prioritaire).
Est-ce-qu'il ya un moyen pour que ça soit vraiment égal au nombre de secondes que je décide?