Lancer une boucle while depuis un bouton

ezor Messages postés 177 Date d'inscription   Statut Membre Dernière intervention   -  
ezor Messages postés 177 Date d'inscription   Statut Membre Dernière intervention   -
Bonsoir tout le monde,

Je suis sur un projet en ce moment, qui nécessite une interface graphique. J'ai donc mis des boutons, et je voudrais que l'un d'eux lance une animation graphique. Voici donc les extraits de code :

dans la classe qui étend JFrame

 else if (bouton_appuye == "start/stop"){

   if(compteur == false){
    System.out.println("start");
    fond.set_bol_anim(true);
    fond.animation();
    compteur = true;

   }
   else
   {
    System.out.println("stop");
    fond.set_bol_anim(false);
    compteur = false;
   }
  }



Et dans la classe qui étend JPanel (dont l'instance est "fond")
public void animation(){

   while(bol_anim == true){
    this.add_pos(1,1);

    try {
     Thread.sleep(10);
    } catch (InterruptedException e) {
     e.printStackTrace();
    }
   }
  }


Dans cette même classe,
------fond.set_bol_anim() modifie le bol_anim.
------this.add_pos(1,1); modifie de (1,1) les coordonnées d'un dessins



Le problème est le suivant : le bouton marche bien, et la méthode d'animation est aussi fonctionnelle.
Cependant, lorsque je met l'un dans l'autre, le bouton start/stop reste activé dans une sorte de boucle infinie, plus rien ne se passe, et je suis obligé de coupé "à la main" le processus.
De plus, lorsque j'enlève la boucle while, tout se passe bien (sauf qu'évidement, j'ai pas mon animation ;) )

Avez vous une idée de ce qui ne va pas dans mon code?

D'avance merci

ezor

2 réponses

KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Bonsoir,

Il faudrait le code complet pour comprendre exactement où ces morceaux de code intervienne et tester, mais quelques remarques à la lecture du code :

Pour
if (bouton_appuye == "start/stop")
, la comparaison de valeur de deux objets doit se faire avec la méthode equals, l'opérateur == ne compare que l'égalité des références de ces objets.

Pour
if(compteur == false)
et
while(bol_anim == true)
tu fais des comparaisons inutiles,
x == true
se simplifie en
x
et
x == false
se simplifie en
!x
.
0
ezor Messages postés 177 Date d'inscription   Statut Membre Dernière intervention   11
 
Bonsoir, et merci de intéresser à mon problème ;)

Alors, effectivement, ces comparaisons ne servent pas à grand chose, je n'avais pas fait attention (je suis pas encore très à l'aise en Java, donc j'ai du mal à voir ce genre de chose)

Ensuite, voilà le actionPerformed des boutons
public void actionPerformed(ActionEvent evenement) {
  String bouton_appuye = evenement.getActionCommand();

  if(bouton_appuye == "incrémente"){
   test.inc_numero();
   fond.add_pos(1, 1);
  }
  else if(bouton_appuye == "décrémente"){
   test.dec_numero();
   fond.add_pos(-1, -1);
  }
  else if (bouton_appuye == "affiche"){
   test.affiche_numero();
  }
  else if (bouton_appuye == "start/stop"){

   if(!compteur){
    System.out.println("start");
    fond.set_bol_anim(true);
    fond.animation();
    compteur = true;

   }
   else
   {
    System.out.println("stop");
    fond.set_bol_anim(false);
    compteur = false;
   }
  }

  else{
   System.out.println("error");
  }
 }

Ça devrait t'aider à à comprendre pourquoi ce == . Mon bouton a un nom, et je compare ce nom (sous forme de String). J'ai trouvé cette façon de faire sur internet, mais elle est peut être pas optimale.


"test" est l'instance d'une classe de programme test qui me permet pour le moment de tester mon interface avec des trucs simples (incrémenter une position, tracer des cases de taille variable etc...)

Quelle autre partie du code te faut il?
ezor
0