IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

Sortir d'une boucle while


Sujet :

Langage Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 25
    Points : 10
    Points
    10
    Par défaut Sortir d'une boucle while
    Bonjour

    J'ai créer une interface graphique java dans laquelle j'ai plusieurs boutons.
    Lorsque j'appuie sur un des boutons je rentre dans une boucle while "infini" (voulu) de laquelle je voudrais sortir que j'appuie sur un des autres boutons. Comment pourrais-je écrire ce code a l'interieur du premier bouton ?
    Voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    private JButton getJButtonjoue() {
            if (jButtonjoue == null) {
                jButtonjoue = new JButton();
                jButtonjoue.setText("GO");
                jButtonjoue.setBounds(new Rectangle(81, 58, 88, 53));
                jButtonjoue.addActionListener(new java.awt.event.ActionListener() {
                    public void actionPerformed(java.awt.event.ActionEvent e) {
                        System.out.println("actionPerformed()"); // TODO Auto-generated Event stub actionPerformed()
                    joue =1 ;
     
     
                    while (joue==1){
                            try { InputStream stream = new ByteArrayInputStream(player.getSamples());
                                player.play(stream);                         
                            } catch (Exception uneErreur) {
                            }
     
                        }
                    }
                });
            }
            return jButtonjoue;
        }
    Merci

  2. #2
    Expert éminent sénior

    Avatar de vermine
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    6 582
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2008
    Messages : 6 582
    Points : 79 912
    Points
    79 912
    Par défaut
    1) Fait toi une variable globale que tu change dans l'action du second bouton.
    2) Fait toi un object que tu check dans la boucle et change dans l'action du second bouton.
    3) Fait toi une variable de Session.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 25
    Points : 10
    Points
    10
    Par défaut
    en fait cette variable c'est la variable "joue" que je met a 0 sur le second bouton. Le probleme c'est que je ne peux pas clier sur le second bouton puisque je suis toujours dans la boucle du premier bouton.

  4. #4
    Membre émérite
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Points : 2 582
    Points
    2 582
    Par défaut
    Il faut, en plus de ce que te dis vermine, que tu lances ta boucle while dans un thread séparé.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 25
    Points : 10
    Points
    10
    Par défaut
    Merci, je commence a comprendre, je suis vraiment un novice, mais qu'est ce que cela signifie un thread séparé ?

  6. #6
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    Il y a un thread (AWT) qui vérifie continuellement la pile d'évènement et dispatche vers les différents composant. Ca signifique que, quand tu est dans ton action listener, tu est exécuté par le thread awt. Ca signifie aussi que, tant que tu n'aura pas fini ton travail ce listener, aucun évènement ne pourra être pris en compte (Pas de clics, pas d'appui clavier, meme pas de rafraichissement de le fenêtre).

    Ton problème est donc que, tu dosi créer un nouvel objet étendant Thread, dans lequel tu srcharge la méthode run(), et dans laquelle tu fait ta boucle infinie. ensuite tu fais un start() sur ce thread dans ton actionlistener. C'est obligatoire pour déplacer l'exécution en dehors du thread AWT. La gestion des évènement présuppose que l'opération effectuée dans les listener sera "courte". Quand ce n'est pas la cas (comme toi) on délègue à un Thread séparé qui qui effectuera l'opération en parallèle.

    Pour plus d'infos sur les threads, voire les tutoriaux de ce site.

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 25
    Points : 10
    Points
    10
    Par défaut
    Bonjour,

    Je ne suis pas sur de tout conprendre. J'ai créer ma nouvelle classe extend thread dans laquelle j'ai mis la methode. Voici la classe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    import java.io.*;
    import javax.sound.sampled.*;
     
     
    public class nouvelleobjet extends Thread {
     
    	Metroviewer thisClass = new Metroviewer();
     
    	void jouer(){
    	int joue = thisClass.joue ;
    	sound player = new sound("son2.wav");
    	int vitesse = thisClass.vitesse ;
     
    	while (joue==1){
                try { InputStream stream = new ByteArrayInputStream(player.getSamples());
                	player.play(stream); 
     
                } catch (Exception uneErreur) {
                }
    		try  {Thread.sleep(((1000*60/vitesse)));}catch(Exception uneErreur) {}
     
    		}}
     
    ET voici ensuite l'action du bonton  :
    	private JButton getJButtonjoue() {
    		if (jButtonjoue == null) {
    			jButtonjoue = new JButton();
    			jButtonjoue.setText("GO");
    			jButtonjoue.setBounds(new Rectangle(81, 58, 88, 53));
    			jButtonjoue.addActionListener(new java.awt.event.ActionListener() {
    				public void actionPerformed(java.awt.event.ActionEvent e) {
    					System.out.println("actionPerformed()"); // TODO Auto-generated Event stub actionPerformed()
    				joue =1 ;
     
    				}
    			});
    		}
    		return jButtonjoue;
    	}
    Maintenand la question est ou et que doit-je mettre comme reste de code pour faire appliquer la methode jouer quand je clique sur le bouton "jButtonjoue" ???

    Merci de vos reponses

  8. #8
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    La méthode principale (cf la doc sur la création de thread) d'un thread est la méthode run(), c'est là dedans que tu dois mettre le code principal. Ensuite, tu fait un start sur une instance de ton thread, et run() va etre exécuté en parallèle. Tout ce que tu as à faire dans ton listener c'est un new MonThread().start()

    ps:

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 25
    Points : 10
    Points
    10
    Par défaut
    OK mais que doit-je mettre dans le code du constructeur du Thread ???

  10. #10
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    a priori, rien

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 25
    Points : 10
    Points
    10
    Par défaut
    Que signifie " faire un start sur une instance de mon thread" ?

    Merci

  12. #12
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    méthode start() de ton instance.

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 25
    Points : 10
    Points
    10
    Par défaut
    Bonjour voici donc ce que j'ai fait. Voici le Thread
    #public class MonThread extends Thread {
    MonThread() {
    // ... code du constructeur ...
    }

    public void run(){
    System.out.print("rentre");
    sound player = new sound("son2.wav");
    while(joue==1){
    try { InputStream stream = new ByteArrayInputStream(player.getSamples());
    player.play(stream);

    } catch (Exception uneErreur) {
    }
    try {Thread.sleep(((1000*60/vitesse)));}catch(Exception uneErreur) {}

    }}
    } #
    et voici ce que met dans l'action du bouton

    #private JButton getJButtonjoue() {
    if (jButtonjoue == null) {
    jButtonjoue = new JButton();
    jButtonjoue.setText("GO");
    jButtonjoue.setBounds(new Rectangle(81, 58, 88, 53));
    jButtonjoue.addActionListener(new java.awt.event.ActionListener() {
    public void actionPerformed(java.awt.event.ActionEvent e) {
    System.out.println("actionPerformed()"); // TODO Auto-generated Event stub actionPerformed()
    joue =1 ;

    MonThread().start(); // pas accepté

    }
    });
    }
    return jButtonjoue;
    }#

    Néanmoins il me souligne MonThread().start(); et me dit que la methode MonThread() n'existe pas. Que doit-je faire ?

  14. #14
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MonThread().start(); // pas accepté
    Oui mais non! Il manquerait pas comme le mot clé "new" ?

  15. #15
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 25
    Points : 10
    Points
    10
    Par défaut
    Et oui erreur de debutant !! normal je suis un debutant ! Merci beaucoup pour toutes ces informations !!!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 16/12/2012, 19h52
  2. [AC-2000] Sortir d'une boucle while wend
    Par 973thom dans le forum VBA Access
    Réponses: 2
    Dernier message: 03/09/2009, 10h14
  3. comment sortir d'une boucle while d'un Iterator
    Par solawe dans le forum Langage
    Réponses: 6
    Dernier message: 18/03/2008, 13h46
  4. Sortir d'une boucle while
    Par chris81 dans le forum Windows Forms
    Réponses: 7
    Dernier message: 21/01/2008, 11h50
  5. Probleme pour sortir d'une boucle while
    Par aikinhdo dans le forum Langage
    Réponses: 0
    Dernier message: 27/07/2007, 15h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo