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

Interfaces Graphiques en Java Discussion :

implementer un KeyListener dans un thread


Sujet :

Interfaces Graphiques en Java

  1. #1
    Membre régulier
    Inscrit en
    Juin 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 11
    Par défaut implementer un KeyListener dans un thread
    salut
    j'ai un programme avec trois classes:
    premiere classe gere la communication liaison série et grace a un bouton j'envoi la commande et je recoi la reponse dans un jTextarea.

    ma deuxieme classe est un thread ou je dois implementer un key listener pour interrompre la liaison série a tout moment.

    comment coder ce keylistener dans le thread j'ai ce programme mais j'arrive pas a intercepter la touche clavier pour executer la fermeture de la comm...

    voila le code du thread!!!

    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
    //*************************************************
    package communication;
     
    import java.awt.event.KeyEvent;
    import java.awt.event.KeyListener;
     
    public class escape extends Thread implements KeyListener {
     
    		public escape (){
     
    		}
     
    		public void run(){
    			for(int i=0;i<1000000000;i++){
     
    				System.out.println("comm!!!!!!!");
    			}
    		}
     
    		public void keyReleased(KeyEvent a) {
    			// TODO Auto-generated method stub		
    		}
     
     
    		public void keyTyped(KeyEvent arg0) {
    			// TODO Auto-generated method stub
     
    		}
     
    		public void keyPressed(KeyEvent e) {
    			if (e.getKeyCode()==KeyEvent.VK_ESCAPE){
    				System.out.println("qdfqgsdfg");
    			}
     
    		}
    }
    //**************************************
    une partie du code de la comm (bouton d'envoi de la commande) !!!!

    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
    private CMaButton getJButton() {
    		if (jButton == null) {
     
    			jButton = new CMaButton();
    			jButton.setText("Envoyer");
    		jButton.setBounds(new Rectangle(48, 126, 79, 26));
    		jButton.setMnemonic(KeyEvent.VK_E);
     
    		jButton.addActionListener(new java.awt.event.ActionListener() {
    		public void actionPerformed(java.awt.event.ActionEvent e) {				
    		Commande = jTextField.getText();	
    		escape C1 = new escape();
    		C1.start();
    		itement = new C_traitement(Commande + "\r");
    		jTextArea.setText(traitement.execute());}});			
     
    }
    		return jButton;
    	}

    merci d'avance pour votre aide

  2. #2
    Membre régulier
    Inscrit en
    Juin 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 11
    Par défaut
    toujours bloqué !!
    personne ne sait comment faire....

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Février 2007
    Messages
    572
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Février 2007
    Messages : 572
    Par défaut
    A quel moment tu ajoutes le KeyListener ?

  4. #4
    Membre régulier
    Inscrit en
    Juin 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 11
    Par défaut
    je le rajoute dans la classe escape qui est un thread et en fait que je fais le star il execute le run. mais il detecte pas l'appui sur une touche !!!!

  5. #5
    Membre régulier
    Inscrit en
    Juin 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 11
    Par défaut
    normalement il doit executer le code qui correspond au key pressed
    merci

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Février 2007
    Messages
    572
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Février 2007
    Messages : 572
    Par défaut
    Dans l'exemple que tu donnes, je ne vois pas comment tu peux voir la trace sur l'appui touche.
    D'une part, tu ne fais pas d'enregistrement du listener sur le bouton (ni dans actionPerformed, ni dans la classe escape).
    D'autre part, la boucle qui tu as mis dans escape.run() affiche des millions traces sans interruption. Dans de telles conditions, la trace sur l'appui touche passe forcement inapercue.

    Peut être que le code que tu as posté est un peu trop simplifié. Sinon, ca pourrait être un bonne piste pour ton problème.

  7. #7
    Membre expérimenté

    Étudiant
    Inscrit en
    Mai 2006
    Messages
    200
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 200
    Par défaut
    Bonjour,

    Pourquoi est ce que tu as besoin d'un Thread ??? Si c'est pour attendre la touche !!! c'est inutile.

    Quant tu ajoutes ton ActionListener à ton bouton il te faut spécifier en paramètre le listener en question et dans ton cas c'est un objet de la classe escape (remarque : les noms de classes prennent une majuscule => Escape).

    D'où :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Escape escape = new Escape();
    button.addActionListener(escape);

  8. #8
    Membre régulier
    Inscrit en
    Juin 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 11
    Par défaut
    merci pour vos reponses mais je pense que je n'ai pas tres bien explique mon probleme !!!

    je n'ai pas de bouton c'est une classe qui ne derive pas d'une JFrame !!!
    je veux juste creer une interruption en eppuyant sur un button escape par exemple et executer le code dans le key pressed !!!et les messages dans le run c'etait juste pour voir si mon thread s'execute bien!!

    je ne peux pas executer le keylistener dans le bouton dela classe ou il ya une JFrame car il y a deja un actionlistener qui fait que je recoi de ma liaison série donc il ne peut pas executer le key listener que jusqu'a la fin de l'action performed donc je ne peux pas arreter la liaison série de cette facon si ce n'est faire un Thread qui interviendrai comme une interruption pour arreter la comm!!!

    je sais pas si c'est asse clair !!!! voir les codes que j'ai poste au debut..
    merci d'avance

  9. #9
    Membre expérimenté

    Étudiant
    Inscrit en
    Mai 2006
    Messages
    200
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 200
    Par défaut
    Bonjour,

    je n'ai pas de bouton c'est une classe qui ne derive pas d'une JFrame !!!
    J'ai pas trop compris ça !!! Si tu veux te servir d'un bouton et pour qu'il marche il faut le placer dans une fenêtre, non ???

    Si c'est un KeyListener que tu veux ajouter à ton bouton, il te faut l'ajouter :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    monBouton.addKeyListener(monKeyListener);

  10. #10
    Membre régulier
    Inscrit en
    Juin 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 11
    Par défaut
    je veux mettre le keylistener dans un thread non pas dans un bouton !!!

  11. #11
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par eight85 Voir le message
    je veux mettre le keylistener dans un thread non pas dans un bouton !!!
    On ne peut pas appliquer un KeyListener à un thread : cela ne veut rien dire. Les KeyListener s'applique sur des composants graphiques qui sont susceptible de recevoir des entrées-clavier...


    Pour implémenter une touche de fonction qui sera appelée n'importe quand il faut passer par les ActionMap :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    		// On donne un nom à cette action :
    		final String ACTION_NAME = "action-name";
     
    		// On associe une action à ce nom :
    		jButton.getActionMap().put(ACTION_NAME, new AbstractAction() {
    			public void actionPerformed(ActionEvent e) {
    				// Le traitement de l'action
    			}
    		});
     
    		// On associe une combinaison de touche à cette action :
    		jButton.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(
    				KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0),
    				ACTION_NAME);
    Et dans ce cas l'action sera exécuté dès que la touche ESCAPE sera pressé, si la fenêtre contenant le JButton a bien le focus...

    a++

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    142
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 142
    Par défaut
    une petite idée peut etre très mauvaise :

    tu créer un bouton que tu n'affiches pas et tu simule l'appui de ce bouton dans ton thread, ce qui lancera le keylistener si celui ci est attaché au bouton qu'on ne voit pas. Je sais pas si c'est clair et si l'idée et bonne....

  13. #13
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2007
    Messages
    697
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 697
    Par défaut
    Si j'ai bien compris tu veux recuperer un evenement lié à un touche n'importe quand. Si c'est bien ça, tu peut essayer un AWTListener qui ecoute tout les evenement de l'application.

Discussions similaires

  1. impossible d'utiliser un HWND parent dans un thread
    Par sylvain114d dans le forum Windows
    Réponses: 12
    Dernier message: 23/09/2004, 13h21
  2. Synchronize bloquant dans un thread
    Par bencot dans le forum Langage
    Réponses: 3
    Dernier message: 20/08/2004, 17h42
  3. [Process]Execution de process dans un thread
    Par devjava dans le forum Concurrence et multi-thread
    Réponses: 5
    Dernier message: 18/06/2004, 11h34
  4. erreur d'un timer declaré dans un thread
    Par hak5 dans le forum C++Builder
    Réponses: 2
    Dernier message: 03/04/2004, 10h20
  5. Gestion des message windows dans les threads
    Par billyboy dans le forum Windows
    Réponses: 5
    Dernier message: 06/10/2003, 18h25

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