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

Concurrence et multi-thread Java Discussion :

[débutant][Thread] wait et NotifyAll


Sujet :

Concurrence et multi-thread Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    162
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 162
    Par défaut [débutant][Thread] wait et NotifyAll
    Bonjour,

    Voilà c'est la première fois que je programme avec des threads et j'ai un souci dans mon programme qui je pense est juste du à ma méconnaissance...

    Voilà j'ai une méthode qui est lancée , qui fait son petit bazar (elle met des boutons enabled et les colorie) puis elle doit attendre le clic sur l'un des boutons coloriés avant de continuer. J'ai donc proceder comme cela :
    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
     public synchronized TacheSimulee setSelectionnable(ArrayList<TacheSimulee> taches){
            Component[] comp=treePanel.getComponents();       
            //premiere boucle on met en evidence les boutons que l'on peut selectionner
            for(int i=0; i<comp.length;i++){
                SimulationToggleButton btn=(SimulationToggleButton)comp[i];
                if (taches.indexOf(btn.tache)!=-1){
                    btn.proposeChemin();
                }
            }
            while(AdaptateurP.AdaptateurSimulation.cheminChoisi()==null){
                try{
                    wait();
                }
                catch(Exception e){
                    System.out.println(e);
                }
            }
            return AdaptateurP.AdaptateurSimulation.cheminChoisi();        
        }
    Et dans le mouseListener d'un bouton :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     public synchronized void mouseClicked(MouseEvent e){
                AdaptateurP.AdaptateurSimulation.setCheminChoisi(tache);
                notifyAll();
            }
    Quand je fais des print je passe bien par mon mouse Listener qui fait un notifyAll() mais après rien ne se passe l'application reste bloquée au wait() et pourtant la méthode cheminChoisi() ne renvoit plus null.

    Quelqu'un peut-il m'éclairer? N'hésitez pas à me proposer une autre méthode si la mienne vous parait tordue
    Merci!

  2. #2
    Membre éprouvé
    Inscrit en
    Avril 2004
    Messages
    170
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 170
    Par défaut
    Je ne suis pas categorique mais je pense que ton pb vient de la :
    pour que le wait ne soit plus bloquant, il faut que le notifyAll soit appele sur le meme objet que le wait.
    D'apres ce que je vois, le wait est appelé sur l'objet qui contient la methode setSelectionnable. Je ne sais pas si la methode mouseClicked fait partie de la meme classe et donc par consequent si l'appel de notifyAll se fait sur le meme objet que le wait.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    162
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 162
    Par défaut
    Je venais justement de lire cette info!!
    Effectivement mon mouseClicked() n'appartient pas à la même classe que celle qui déclenche le wait()!
    Donc j'ai modifié un peu mon code pour que le NotifyAll() se fasse dans la même classe que le wait() et ça a l'air de fonctionner!!
    Merci!

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

Discussions similaires

  1. [Thread] wait and notify
    Par storm_2000 dans le forum Concurrence et multi-thread
    Réponses: 0
    Dernier message: 27/10/2009, 22h24
  2. Problème Thread wait / Notify
    Par tiamat dans le forum Concurrence et multi-thread
    Réponses: 17
    Dernier message: 28/05/2009, 12h24
  3. [THREAD]wait() sur un processus autre que celui courant
    Par GesMo dans le forum Concurrence et multi-thread
    Réponses: 1
    Dernier message: 20/03/2008, 11h50
  4. [Débutant] Synchronisation - wait() et notifyAll()
    Par Mattius007 dans le forum Langage
    Réponses: 7
    Dernier message: 14/01/2008, 12h27

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