cs_natou
Messages postés3Date d'inscriptionvendredi 21 février 2003StatutMembreDernière intervention20 septembre 2008
-
20 sept. 2008 à 21:46
uhrand
Messages postés491Date d'inscriptionsamedi 20 mai 2006StatutMembreDernière intervention15 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) {}
//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);
uhrand
Messages postés491Date d'inscriptionsamedi 20 mai 2006StatutMembreDernière intervention15 juillet 20129 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();
}