[JAVA] Mettre a jour variable dans boucle for

Fermé
annisseur - Modifié par annisseur le 4/11/2012 à 20:24
 annisseur - 4 nov. 2012 à 20:47
Bonjour,

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:

1 réponse

KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
4 nov. 2012 à 20:38
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 :

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).
0
Merci ça fonctionne nickel!
Est-ce-qu'il ya un moyen pour que ça soit vraiment égal au nombre de secondes que je décide?
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
4 nov. 2012 à 20:46
"vraiment égal" non. Mais on peut s'arranger pour avoir une erreur plus faible, et en particulier pour ne pas les accumuler, c'est à dire que si tu fais une pause de 't' millisecondes, tu auras au pire 't' millisecondes de retard. Pour cela il faut utiliser l'heure du système (voir Décompte de temps en java).
0
ok merci
0