Lancer une boucle while depuis un bouton

Fermé
ezor Messages postés 177 Date d'inscription dimanche 1 mars 2009 Statut Membre Dernière intervention 27 octobre 2016 - Modifié par ezor le 8/03/2015 à 23:23
ezor Messages postés 177 Date d'inscription dimanche 1 mars 2009 Statut Membre Dernière intervention 27 octobre 2016 - 9 mars 2015 à 00:03
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 16755 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 12 février 2025 3 020
8 mars 2015 à 23:48
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 dimanche 1 mars 2009 Statut Membre Dernière intervention 27 octobre 2016 11
Modifié par ezor le 9/03/2015 à 00:05
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