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 surveillant le clavier


Sujet :

avec Java

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 10
    Points : 9
    Points
    9
    Par défaut Thread surveillant le clavier
    Bonjour,
    par exemple, j'ai un programme (dans le main) qui affiche toutes les secondes un "coucou" (dans une boucle infini par exemple).
    Je voudrais savoir si il est possible d'avoir un thread "qui surveille" le clavier. Lorsque l'utilisateur appuie sur la touche 'q', le programme s'arrête.
    Comment le faire ?

    Merci

  2. #2
    Modérateur
    Avatar de XxArchangexX
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mars 2012
    Messages
    1 159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2012
    Messages : 1 159
    Points : 2 323
    Points
    2 323
    Par défaut
    Bonsoir,

    Je te propose 2 méthodes :

    graphique : C'est un KeyListener et tu as le listener keyPress dedans, il te suffit de vérifier que la touche est q et voila .

    console : tu fais tourner ton programme jusqu'à ce que l'utilisateur saisisse une lettre et tu vérifies si c'est un q alors tu arrêtes la boucle.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Scanner sc = new Scanner(System.in);
    System.out.println("Attente de saisie ...");
    String str = sc.nextLine();
    if(str.equals("q") exit(0);
    L'Etat est bien administré quand l'escalier de l'école est usé et que l'herbe croît sur celui du tribunal.

    Modérateur BI

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    281
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 281
    Points : 321
    Points
    321
    Par défaut
    Je pense que la boucle de ton thread doit avoir une condition sur un boolean que tu mets à false avec la méthode d'Archange. Je pense que c'est plus propre.

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 10
    Points : 9
    Points
    9
    Par défaut
    Bonjour,
    Voici mon code. Cela ne fonctionne pas. Je voudrais que mon thread qui surveille serait une tache en arrière plan.

    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
    38
    39
    40
    41
    import java.io.*;
    import java.util.*;
     
    public class TestThread{
      public static void main(String[] args) 
      {
    	  Surveille s=new Surveille();
     
    	  s.start();
     
    	  try
    	  {
    		  for(int i=0;i<20;i++)
    		  {
    			  System.out.println("Coucou "+i);
    			  Thread.sleep(1000);
    		  }
    	  }
    	  catch (InterruptedException e)
    	  {
    		  System.out.println("Pb");
    	  }
      }
    }
     
    class Surveille extends Thread
    {
    	public void run()
    	{
    		boolean temp=true;
    		while(temp)
    		{
    			Scanner sc = new Scanner(System.in);
    			System.out.println("Attente de saisie ...");
    			String str = sc.nextLine();
    			if(str.equals("q")) 
    				temp=false;
    		}
    		System.exit(0);
    	}
    }

  5. #5
    Modérateur
    Avatar de XxArchangexX
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mars 2012
    Messages
    1 159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2012
    Messages : 1 159
    Points : 2 323
    Points
    2 323
    Par défaut
    Chez moi ce code fonctionne, il faut que la console soit active et il faut saisir le q dedans puis sur entrer pour tester la saisie. Sa fonctionne mais toi ce que aimerais je pense c'est vérifier le q sans avoir à cliquer sur entrer et la en mode console je vois pas trop.
    L'Etat est bien administré quand l'escalier de l'école est usé et que l'herbe croît sur celui du tribunal.

    Modérateur BI

  6. #6
    Membre actif Avatar de Jacobian
    Inscrit en
    Février 2008
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 425
    Points : 245
    Points
    245
    Par défaut
    je te fait le programme:
    n'oublier pas jhook.jar (piece jointe)
    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
     
    import javax.swing.JFrame;
    import jhook.Keyboard;
    import jhook.KeyboardListener;
     
    public class Main {
     
    	public static void main(String[] args) {
    		new JFrame().setVisible(true); // juste pour la demo que la touche q fonctionne
     
    		Keyboard kb = new Keyboard();
    		kb.addListener(new KeyboardListener() {
    			public void keyPressed(boolean keydown, int vk) {
    				if (keydown && vk == 81) {//81 et le code de q
    					System.exit(0); 
    				}
    			}
    		});
     
    	}
    }
    Fichiers attachés Fichiers attachés

Discussions similaires

  1. [Thread] deux joueurs sur le même clavier
    Par homeostasie dans le forum SDL
    Réponses: 16
    Dernier message: 04/11/2006, 15h30
  2. surveiller votre clavier
    Par sitirna dans le forum C++Builder
    Réponses: 11
    Dernier message: 13/08/2006, 20h28
  3. Affichage dans un thread // gestion du clavier!
    Par phraides dans le forum SDL
    Réponses: 5
    Dernier message: 08/07/2006, 12h14

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