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 :

Thread en tant que listener


Sujet :

avec Java

  1. #1
    Membre confirmé
    Avatar de deletme
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2011
    Messages : 257
    Points : 519
    Points
    519
    Par défaut Thread en tant que listener
    Bonjour à toutes et à tous,

    Encore une fois j'ai une question à laquelle je ne trouve pas de réponse.

    J'ai mis en oeuvre une classe qui permet de gérer un port série de mon PC qui utilise l'API RXTX. Cette classe est ensuite utilisée pour lire et envoyer des données depuis une classe que l'on appelera Test qui implémente l'interface Runnable. Je souhaite donc mettre cette classe Test (qui est donc un Thread) en pause tant que l'on ne reçoit pas de caractère sur le port Série. Pour cela, j'ai lu que seul un Thread peut "notifier" un autre Thread afin de le réveiller. Il me faut donc créer un deuxième Thread qui serait un Listener du port Série mais est-il possible de définir un Thread en tant que Listener et est-ce une pratique correcte ?

    Merci d'avance pour vos conseils et pour votre indulgence envers mon ignorance...

    Cdlt, dM
    "Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live."
    - Martin Golding
    Traduction obligatoire : "Toujours écrire du code en gardant en tête que le mec qui en assurera la maintenance est un psychopathe violent qui connait votre adresse"

  2. #2
    Membre éprouvé
    Inscrit en
    Mars 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2006
    Messages : 848
    Points : 1 078
    Points
    1 078
    Par défaut
    Bonjour,

    Lorsque l'on travaille avec des communications réseaux à deux sens, dédie deux threads :
    • Un pour l'écriture
    • Un pour la lecture


    Dans ton cas, Test semble être la tâche d'écriture et possède un Thread dédié -> 1er Thread.
    Il te reste donc à écrire du code pour traiter les données qui proviennent de ton port et de l'exécuter dans un autre Thread -> ce que tu semble proposer.

    Donc si j'ai bien tout compris à ta question, la réponse est : oui

  3. #3
    Membre confirmé
    Avatar de deletme
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2011
    Messages : 257
    Points : 519
    Points
    519
    Par défaut
    Ok merci pour ta réponse.

    Une autre question me vient à l'esprit toujours après la lecture de certains documents : Dans tous les exemples que j'ai lu, les threads synchronisés sont de même nature (créés par la même classe). Or dans mon cas, j'aurai un thread d'écoute et un thread de lecture (ils ne seront a priori pas de la issus de la même classe. Comment faire pour que le thread de lecture réveille le thread d'écriture ?
    "Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live."
    - Martin Golding
    Traduction obligatoire : "Toujours écrire du code en gardant en tête que le mec qui en assurera la maintenance est un psychopathe violent qui connait votre adresse"

  4. #4
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    Il n'est pas obligatoire que les deux threads soient créés par la même classe.
    Pour notifier un thread, il suffit d'avoir son adresse, c'est-à-dire une variable Thread décrivant le thread à notifier.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  5. #5
    Membre confirmé
    Avatar de deletme
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2011
    Messages : 257
    Points : 519
    Points
    519
    Par défaut
    Bonjour,

    Je ne suis toujours pas parvenu à ajouter mon Thread en tant que Listener sur mon port série, je ne trouve pas la méthode à suivre ... Même en essayant sur l'écoute d'un JButton ça ne donne rien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    JButton test = new JButton();
    test.addActionListener(new Thread(new monThread()));
    L'erreur stipule que addActionListener attend un ActionListener (logique...) mais comment lui faire passer le Thread ?
    "Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live."
    - Martin Golding
    Traduction obligatoire : "Toujours écrire du code en gardant en tête que le mec qui en assurera la maintenance est un psychopathe violent qui connait votre adresse"

  6. #6
    Membre éprouvé
    Inscrit en
    Mars 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2006
    Messages : 848
    Points : 1 078
    Points
    1 078
    Par défaut
    Tu ne fournis pas un Thread à un bouton mais un ActionListener.
    Lorsque l'utilisateur appuiera sur le bouton, Swing appellera la méthode actionPerformed dans un Thread spécifique dédié aux évènements AWT/Swing.
    En général, il est recommandé de lancer un nouveau Thread depuis cette méthode actionPerformed afin de réaliser le traitement.

    Pour plus d'infos, tu peux lire les tutos sur Swing et l'EDT, ils te donneront plus de détails sur la gestion des threads avec Swing.

  7. #7
    Membre confirmé
    Avatar de deletme
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2011
    Messages : 257
    Points : 519
    Points
    519
    Par défaut
    Ah mais oui je m'entêtais à mettre ce Thread en Listener alors qu'il suffisait de le lancer lors de l'appui du bouton (lors de la réception de données sur mon port série dans mon cas).

    Merci je test ça.
    "Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live."
    - Martin Golding
    Traduction obligatoire : "Toujours écrire du code en gardant en tête que le mec qui en assurera la maintenance est un psychopathe violent qui connait votre adresse"

Discussions similaires

  1. Réponses: 0
    Dernier message: 03/05/2014, 12h23
  2. Un Thread en tant que classe interne, problème de synchro?
    Par gagou7 dans le forum Général Java
    Réponses: 10
    Dernier message: 19/01/2012, 08h30
  3. Lancer un Threads ou un exec "en tant que"
    Par Viduc dans le forum Programmation et administration système
    Réponses: 5
    Dernier message: 04/06/2009, 19h33
  4. [] [Winsock] Pb si je me déconnecte en tant que client
    Par vbcasimir dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 29/04/2003, 18h42
  5. [DROIT] Droits d'auteurs moraux en tant que salariés ?
    Par malotte dans le forum Juridique
    Réponses: 14
    Dernier message: 13/02/2003, 15h56

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