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

avec Java Discussion :

Probleme dans l'arret d'un Thread


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2019
    Messages : 6
    Par défaut Probleme dans l'arret d'un Thread
    Bonjour à tous,

    Tout d'abord je tiens à préciser que j'ai fait le tour des sujets semblables au mien sans toute fois y trouver le même problème que moi ou une solution qui pourrait y remédier.

    Je vous l'explique en quelques mots, J'ai dans un actionListener d'un bouton un Thread qui permet à une fonction de tourner en boucle grâce à un while selon la valeur d'une variable boolean. Je voudrais que lorsque je reclic sur le même bouton, la variable qui fait tourner cette boucle while infini prennent la valeur false pour en arrêter l'exécution.

    Je vous place le code de mon actionListener:
    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
    bouton1.addActionListener( event ->
          {
            boolean test2 = this.test; //On récupère la valeur initial du boolean
            Fenetre f = this; //On récupère l'objet sur lequel notre boucle "infini" va appeler la méthode (pas important dans le pb)
            Thread t1 =  new Thread (new Runnable() {
              @Override
              public void run() {
                while(test2){
                  f.afficheFourmi();
                }
                try{
                  Thread.sleep(10);
                }catch(InterruptedException e){
                  e.printStackTrace();
                }
              }
              });
              if(test2){ //Si la boucle n'est pas en cours d'exécution on lance le thread
                t1.start();
              }else{ //Sinon on modifie la valeur du boolean test de la boucle infini (ce qui ne se fait pas)
                test2 = false; //Le problème est ici, je ne peux pas changer la valeur de cette variable, une erreur me demande de lui mettre un modificateur final afin qu'elle ne puisse plus être changée 
              }
          }
        );
    Il est possible que je n'utilise pas bien certains objets ou certaines fonctions, je ne suis qu'en deuxième année de Licence, tout conseil est le bienvenue ;)

    Merci bien !

  2. #2
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 901
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 901
    Billets dans le blog
    54
    Par défaut
    Un truc du genre :

    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
    private Thread t = null;
     
    bouton1.addActionListener(event -> {
      if (t != null) {
          t.interrupt();
          t = null;
      } else {
        Thread t1 =  new Thread (() -> {
          try{
            while(!isInterrupted()){
              f.afficheFourmi();
              Thread.sleep(10);
            }
          }catch(InterruptedException e){
            e.printStackTrace();
          }
        });
        t = t1;
        t.start();
      }
    });
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  3. #3
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2019
    Messages : 6
    Par défaut
    Citation Envoyé par bouye Voir le message
    Un truc du genre :

    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
    private Thread t = null;
     
    bouton1.addActionListener(event -> {
      if (t != null) {
          t.interrupt();
          t = null;
      } else {
        Thread t1 =  new Thread (() -> {
          try{
            while(!isInterrupted()){
              f.afficheFourmi();
              Thread.sleep(10);
            }
          }catch(InterruptedException e){
            e.printStackTrace();
          }
        });
        t = t1;
        t.start();
      }
    });
    Merci beaucoup, je me disais bien que ça ne devait pas être compliqué, je suis tête en l'air ^^'

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

Discussions similaires

  1. Thread Probleme pour l'arret
    Par Raideman dans le forum C++Builder
    Réponses: 3
    Dernier message: 15/04/2004, 12h17
  2. petit probleme dans une requte POSTGRE SQL
    Par ghis le fou dans le forum Requêtes
    Réponses: 5
    Dernier message: 08/09/2003, 13h51
  3. Probleme dans une clause like !
    Par adil dans le forum Langage SQL
    Réponses: 6
    Dernier message: 15/07/2003, 16h47
  4. Probleme dans ma requete
    Par Kuroro dans le forum Requêtes
    Réponses: 2
    Dernier message: 11/07/2003, 11h14
  5. probleme a l'arret de threads
    Par Sei dans le forum C++Builder
    Réponses: 5
    Dernier message: 16/12/2002, 12h15

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