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 -
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
Et dans la classe qui étend JPanel (dont l'instance est "fond")
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
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
A voir également:
- Lancer une boucle while depuis un bouton
- Lancer une application au démarrage windows 10 - Guide
- Comment faire une capture d'écran sur un samsung sans bouton ? - Guide
- Bouton reinitialisation pc - Guide
- Diagnostic bouton photo - Accueil - Outils
- Bouton home clavier ✓ - Forum PC portable
2 réponses
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
Pour
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 == truese simplifie en
xet
x == falsese simplifie en
!x.
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
Ç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
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