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 :

Instruction Bloquante


Sujet :

avec Java

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 5
    Points : 4
    Points
    4
    Par défaut Instruction Bloquante
    Bonjour,

    je travaille sur un projet java qui permet de connecter plusieurs processus (plusieurs terminal lance le même programme ) , .... après le lancement, chaque processus attend soit un événement extérieur (utilisateur clique sur touche ) ou bien le changement d'un variable (flag= true/false).


    le problème est que comment je peux laisse ce processus attend un de ces 2 événement (le clique de l'utilisateur ou le changement de variable) pour continuer son exécution...... (lecture sur un clavier est bloquante....!!!).....


    Merci d'avance

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    pour le clic de l'utilisateur, il suffit de mettre votre code dans un mouselistener au niveau de votre JFrame.

    Pour le changement d'une variable, c'est un peu plus compliqué. Vosu avez besoin d'un outil verrou, vous faites un wait() dessus. Ensuite, dans un autre thread, vosu faites un notify sur ce même verrou au moment où vous changez la variable. Il faut aussi un drapeau pour indiquer que la variable a changé

    coté attente
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    while (true) {
      synchronized(verrou){
        if (!valeurChangee){
             verrou.wait()
        }
        if (valeurChangee){
            //traiter nouvelle valeur
        }
      }
    }
    coté changement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    synchronized(verrou){
      valeurChangee=true;
      valeur = nouvelleValeur;
      verrou.notifyAll();
    }

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Merci pour votre réponse,


    En fait mon application est lancé dans un terminal (pas JFrame :s )... donc la première proposition ne marchera pas,


    et pour l'utilisation des threads, c'est bonne idée mais cela ne résoudra pas le problème :s

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    une application console n'a pas accès à la souris.
    Pour le thread, pourriez vous expliquer en quoi ça ne conviens pas?

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    mon programme attend un évènement de clavier et pas de souris,....

    mon programme est lancé de 2 terminales,........lors de leurs lancement , il sont en état "bloquer" tous les deux affiche un message de type " cliquer sur une touche (clavier) pour débuter le traitement"

    si je clique sur le 1er terminale , il doit affecter la valeur true a une variable, et continuer son traitement , .... quand le 2eme terminal voit que la variable est true, il continue lui aussi son traitement, (inversement est vrai aussi)

    le problème est que pour "debloquer " ces 2 programmes , ils doivent avoir des listener sur la variable ou bien sur le clavier .....

    merci.

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    en mode console, votre programme ne verra rien tant qu'on aura pas appuyé sur "enter", pour information. Pas de listener existant. Quand aux deux programme, vous devez être conscient que vos deux programme on chacun leur propre zone mémoire. Les changement dans l'un n'affectent en rien l'autre! Pour partager des informations entre deux programme vous devez le faire, par exemple, avec une connexion réseau entre les deux programmes.

Discussions similaires

  1. Comment rendre une instruction bloquante ?
    Par ArnaudFu13 dans le forum Interfaces Graphiques
    Réponses: 8
    Dernier message: 16/01/2013, 17h18
  2. Comment arréter un thread qui exécute une instruction bloquante
    Par nibor2luxe dans le forum Concurrence et multi-thread
    Réponses: 15
    Dernier message: 28/02/2008, 17h03
  3. Instruction pour créer un fichier text ???
    Par Soulsurfer dans le forum Langage
    Réponses: 2
    Dernier message: 06/08/2002, 11h17
  4. [Crystal Report][VB6] instruction PrintReport
    Par yyyeeeaaahhh dans le forum SDK
    Réponses: 4
    Dernier message: 29/07/2002, 14h58
  5. [TASM] Problème concernant l'instruction LGDT
    Par Ninkosen dans le forum Assembleur
    Réponses: 3
    Dernier message: 15/07/2002, 19h09

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