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

Java Discussion :

Détecter keyPressed dans une application non graphique


Sujet :

Java

  1. #1
    Membre éclairé Avatar de adilou1981
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    251
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 251
    Par défaut Détecter keyPressed dans une application non graphique
    Bonsoir,

    Je voudrais détécter qu'une touche de clavier est appuyée puis afficher le
    code de cette touche (ex F1.. etc)avec System.out.println

    Tout ça dans la methode main sans passer par les interfaces graphiques.

    comment faire ?

    merci d'avance

  2. #2
    Membre Expert Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 679
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 679
    Par défaut
    En pur Java ce n'est pas possible.

  3. #3
    Membre éclairé Avatar de adilou1981
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    251
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 251
    Par défaut
    alors je suis preneur d'une solution facile pour arriver à mon but

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par adilou1981 Voir le message
    alors je suis preneur d'une solution facile pour arriver à mon but
    Salut quelle plateforme est visée ? Tu peux éventuellement regarder charva qui possède des KeyListener aussi. A voir si c'est utlisable dans ton cas.

    A plus

  5. #5
    Membre expérimenté Avatar de Torg666
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2008
    Messages
    230
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2008
    Messages : 230
    Par défaut
    As-tu regarder du coté de system.in? L'entrée par défaut c'est le clavier.
    En faisant quelque chose dans ce genre là:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    int touche;
    BufferedInputStream monClavier=new BufferedInputStream(System.in);
     
    while((touche=monClavier.read())!=-1){
     System.out(touche);
     if(touche=='q'){
      monClavier.close()
     }
    }
    C'est surement à amèliorer, c'est juste un idée comme ça.

  6. #6
    Membre éclairé Avatar de adilou1981
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    251
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 251
    Par défaut
    Merci pour l'idée j'ai mis le code suivant:


    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
    package com.sdsi;
     
    import java.io.BufferedInputStream;
    import java.io.IOException;
     
    public class Touche {
     
    	public static void main (String args[]){
     
    		System.out.println("start");
     
    		int touche;
    		BufferedInputStream  monClavier = new BufferedInputStream(System.in);
     
    		try {
    			while((touche = monClavier.read())!=-1){
    			 System.out.println("while");
    			 System.out.println(touche);
    			 if(touche=='q'){
    			  monClavier.close();
    			 }
    			}
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
     
    		System.out.println("end");
     
    	}
     
    }
    Le résultat affiche "start". Après, il reste bloqué sur la ligne du While, pas d'exception ni rien. même en déboguant il reste bloqué sur la ligne while et n'avance pas.

  7. #7
    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 : 44
    Localisation : France

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Si l'application n'a pas le focus, cela ne fonctionnera pas. Or elle ne possède pas de fenêtre, donc cette technique est inopérante.
    Tu dois passer par des appels systèmes.
    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.

  8. #8
    Membre Expert Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 679
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 679
    Par défaut
    Et même si l'application est lancée dans une console, il y a également un autre problème : les entrées sur une console sont généralement bufferisées. Les caractères frappés ne seront traités qu'après un appui sur la touche 'Entrée'.

    Bref le stdin n'est pas vraiment une solution viable a ce problème.

  9. #9
    Membre éclairé Avatar de adilou1981
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    251
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 251
    Par défaut
    Citation Envoyé par dinobogan Voir le message
    Si l'application n'a pas le focus, cela ne fonctionnera pas. Or elle ne possède pas de fenêtre, donc cette technique est inopérante.
    Tu dois passer par des appels systèmes.
    Comment ?

  10. #10
    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 : 44
    Localisation : France

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Citation Envoyé par adilou1981 Voir le message
    Comment ?
    Mon explication me paraissait claire
    Je démontrais pourquoi la technique du "System.in" n'était pas utilisable.
    Qu'est-ce que tu ne comprends pas ?
    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.

  11. #11
    Membre Expert Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 679
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 679
    Par défaut
    Tu dois passer par des appels systèmes.
    Comment ?
    En java pur on ne peut pas.
    Il faut utilser JNI pour exectuter du code natif en Java. et donc faire appel a du code compilé dans un autre langage comme le C++ qui fera peut appeler directement l'API de ton OS. Le problème étant qu'il faut reprogrammer ça pour chaque OS.

  12. #12
    Membre éclairé Avatar de adilou1981
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    251
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 251
    Par défaut
    Citation Envoyé par Uther Voir le message
    En java pur on ne peut pas.
    Il faut utilser JNI pour exectuter du code natif en Java. et donc faire appel a du code compilé dans un autre langage comme le C++ qui fera peut appeler directement l'API de ton OS. Le problème étant qu'il faut reprogrammer ça pour chaque OS.
    ça s'avère compliqué

Discussions similaires

  1. Interet d'une structure N-layers dans une application non web
    Par rvzip64 dans le forum Windows Presentation Foundation
    Réponses: 0
    Dernier message: 20/03/2012, 13h23
  2. [XL-2007] Copier les données d'une cellule dans une Application non Office en VBA
    Par EmmanuelleC dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 11/05/2010, 14h27
  3. Réponses: 1
    Dernier message: 26/05/2006, 11h11
  4. Réponses: 2
    Dernier message: 02/05/2006, 09h32
  5. Réponses: 4
    Dernier message: 14/02/2005, 19h41

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