Ralentir une boucle

Signaler
Messages postés
84
Date d'inscription
mardi 20 septembre 2005
Statut
Membre
Dernière intervention
7 février 2010
-
cs_Seb33300
Messages postés
84
Date d'inscription
mardi 20 septembre 2005
Statut
Membre
Dernière intervention
7 février 2010
-
Bonjour,

Afin d'afficher une annimation de rotation, je doit ralentir une boucle pour ne pas qu'elle s'execute trop vite et que l'annimation s'affiche.

voicu ma boucle :

        for(int i=0; i<100; i++){
            phibase+=phi;
            repaint();
        }

Il faudrait apres le repaint() dans la boucle mettre une "pause" de 1s au moins avant de faire le tour suivant de la boucle.

Apres quelques recherches j'ai trouvé ces code mais ils ne fonctionnent pas dans mon cas :
L'image n'est pas reactualisé toutes les seconde mais seulement a la fin de la boucle apres la pause
try
{
Thread.currentThread().sleep(1000);
}
catch(InterruptedException ex){}

Meme chose pour :
            Object o=new Object();
            try
            {
                synchronized(o) { o.wait(1); }
            }
            catch(InterruptedException ex) { }

3 réponses

Messages postés
46
Date d'inscription
vendredi 30 septembre 2005
Statut
Membre
Dernière intervention
2 juin 2014

Tu peux mettre un wait dans ta boucle.

Je crois que tu peux le faire avec Thread.wait(nb milli sec);
Messages postés
188
Date d'inscription
mercredi 9 avril 2003
Statut
Membre
Dernière intervention
10 août 2009

tu peux utiliser un JTimer si tu utilise swing.
mais si tu souhaite utiliser la méthode thread :

try {
       for(int i=0; i<100; i++){
            phibase+=phi;
            repaint();
           Thread.sleep(1000);
        } catch(InterruptedException ex){}

En ce qui concerne le wait, son utilisation est utile pour la synchronisation des threads : cela sert a attendre qu'un thread fils notifie celui ci ... pas vraiment utile dans ton cas.
Je te conseille cependant le JTimer, car dans ton cas l'application va etre "endormi" pendant une seconde... et ceux pendant plus d'une minute  40... limite un peu chiant...
   
Messages postés
84
Date d'inscription
mardi 20 septembre 2005
Statut
Membre
Dernière intervention
7 février 2010

Désolé l'annimation n'aparai pas avec ta méthode :/

Par contre j'ai trouvé une autre méthode qui marche mais il reste encore un probleme à regler :

Il faudrais stoper le timer à l'interieur de celui ci mais je n'ai pas trouver de moyen de le faire (il n'a pas l'air d'accepter le stop() )

finalint DELAY = 50;
finallong start = System.currentTimeMillis();
final Timer timer = new Timer(DELAY, new ActionListener(){
    int i = 0;
    publicvoid actionPerformed(ActionEvent e){
    if(i<30){
        // Code
        repaint();
        i++;
    }else{
    // stop l'annimation
    // Code
timer.stop(); // La variable locale timer n'a peut-être pas été initialisée
repaint();
    }
    }
});

timer.start();