Animation qui ne réagit pas

cs_natou Messages postés 3 Date d'inscription vendredi 21 février 2003 Statut Membre Dernière intervention 20 septembre 2008 - 20 sept. 2008 à 21:46
uhrand Messages postés 491 Date d'inscription samedi 20 mai 2006 Statut Membre Dernière intervention 15 juillet 2012 - 21 sept. 2008 à 09:32
Bonjour à tous,

       Je dois créer un applet qui implémente "Runnable".  Je dois y ajouter un thread qui lance une petite animation toute simple.  Celle-ci fonctionne très bien.  La ou les choses se compliquent, c'est que mon animation doit arreter quand on clique dessus, et redemarrer si ou clique a nouveau. 

Pour l'instant, quand je clique une fois, mon application arrete, mais ensuite, elle ne veut plus redémarrer.  Je crois qu'il y a quelque chose que je ne comprend pas dans les évenements. 

J'apprécierais beaucoup une piste me disant ou j'ai pu faire erreur....  car je débute avec java et honnetement, je suis completement perdue.

voici mon code :

import java.awt.*;
import java.applet.Applet;


public class AnimImages extends Applet implements Runnable {
 Thread animation = null;
    private int posImage= 0;
    private Image [] tableImg = new Image[8];
    private boolean roule = true;
   
   
   
        //Évenement qui change l'image au click de la souris
    public boolean mouseDown(Event evt,int x, int y){
       
        //Si la variable de position d'image est plus petite que la longeur du tableau, elle s'incrémente. 
        //Sinon, elle retourne au début pour afficher la premiere image à nouveau        roule roule false;
        if (roule == true) animation.start();
        if (roule == false) animation.stop();
  showStatus("Roule = " + roule);
        return true;
    }


   
   
    public void start(){
     if (animation == null){
      animation = new Thread(this);
      animation.start();
     } 
    } 
     
     
    public void stop(){
     if (animation != null)
      animation.stop();
    }
     
    public void run(){
     //Définit la priorité du processus
     animation.setPriority(1);
     
     //Tant que l'animation est "en vie", on afficher l'image,
     //on laisse dormir le processus et on incrémente
     //le pointeur du tableau d'image pour l'image suivante
     while (animation.isAlive()){
      repaint();
      try {
             animation.sleep(50);
            } catch (InterruptedException e) {}
   
      posImage = posImage < tableImg.length-1? posImage + 1: 0;
     }
    } 
    
     
    //Initialisation de l'applet
    public void init() {
     setBackground(Color.WHITE);
  
  //Boucle qui ajoute les images au tableau d'image
  for (int i = 0; i < tableImg.length; i++){
   tableImg[i]=getImage(getCodeBase(), "../images/" + "guepard" + (i + 1) + ".gif");
   }
  
    }
   
 public void update(Graphics g){
  paint(g);
 }
   
   
    public void paint(Graphics g) {
  g.setColor(getBackground());  
  g.fillRect(0,0,200,150);
  g.drawImage(tableImg[posImage],10,15,this);
     
    }
   
}

1 réponse

uhrand Messages postés 491 Date d'inscription samedi 20 mai 2006 Statut Membre Dernière intervention 15 juillet 2012 9
21 sept. 2008 à 09:32
Nous ne pouvons pas réanimer un Thread mort. Donc il nous faut créer un nouveau Thread, par exemple comme ceci:
if (roule == true) {
    animation = null;
    start();
}
0
Rejoignez-nous