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

Langage Java Discussion :

Lire un 'char' sans appuyer sur enter


Sujet :

Langage Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 91
    Points : 47
    Points
    47
    Par défaut Lire un 'char' sans appuyer sur enter
    Bonjour,

    j'aimerais qu'un de mes programmes réagisse dès l'appui sur une touche du clavier.

    Je ne peux pas le faire avec un keylistener car je n'utilise pas d'interface graphique.

    L'utilisation de la classe Scanner force l'utilisateur à appuyer sur la toucher entré pour pouvoir lire le caractère.

    Puis-je contourner cela ? Ou bien existe-t-il une autre classe permettant de le faire ?

  2. #2
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

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

    Informations forums :
    Inscription : Avril 2009
    Messages : 540
    Points : 532
    Points
    532
    Par défaut
    Si tu n'utilises pas d'IG, tu fais ça en console ?
    Tu peux peut-être redéfinir ta méthode ou la classe Scanner.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 91
    Points : 47
    Points
    47
    Par défaut
    Oui mon affichage se fait dans la console.

    En fait ce que je voudrais faire ressemblerait à un while dans lequel à chaque tour un caractère est demandé à l'utilisateur.

    Je ne peux pas faire un string que je redécoupe par la suite car après chaque ajout d'un caractère je dois afficher quelque chose de différent.

    Redéfinir la classe Scanner me semble un peu complexe comme méthode je pensais qu'il existait quelque chose de plus simple.

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 807
    Points
    48 807
    Par défaut
    ce n'est pas possible, le seul accès à la console par java passe par l'entrée standard. Hors c'est l'OS dans ce cas là qui gère le clavier. Et l'OS n'envoie rien à l'application tant qu'on a pas appuyé sur enter. Et fait il n'y a même pas de garantie que l'entrée standard passe par le clavier, ça pourrait venir d'une fichier ou d'une autre application

  5. #5
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

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

    Informations forums :
    Inscription : Avril 2009
    Messages : 540
    Points : 532
    Points
    532
    Par défaut
    Et il n'y a pas un moyen de simuler l'appui sur entrer.
    Genre dans ta boucle après avoir tapé le char, tu envoies entrer ? C'est une idée

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 91
    Points : 47
    Points
    47
    Par défaut
    Si comme le dis tchize_ l'OS n'envoie aucune information sans l'appui de la toucher entré alors je ne peux pas détecter qu'un caractère a été entré pour ensuite simuler l'appui sur la touche entré dommage.

    Merci pour votre aide, ca sera un peu plus embêtant à l'utilisation mais pour le moment je n'ai apparemment pas le choix.

    Je verrais plus tard avec un KeyListener si j'implemente une interface.

  7. #7
    Membre expérimenté
    Avatar de yotta
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Septembre 2006
    Messages
    1 088
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 088
    Points : 1 540
    Points
    1 540
    Par défaut
    Bonsoir,

    Je penses que la réponse à votre problème se trouve là :
    http://www.java-tips.org/java-se-tip...s-in-java.html

  8. #8
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 559
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 559
    Points : 21 621
    Points
    21 621
    Par défaut
    Citation Envoyé par pursang Voir le message
    Je penses que la réponse à votre problème se trouve là :
    http://www.java-tips.org/java-se-tip...s-in-java.html
    Dans ce cas il va falloir préciser comment.

  9. #9
    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 : 43
    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 te faudrait passer ton shell en mode raw, ou mode brut.
    Tout dépend du type de console que tu utilises, ainsi que de l'OS. Je n'ai jamais vérifié si c'était possible sous Windows.

  10. #10
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    335
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 335
    Points : 524
    Points
    524
    Par défaut
    Java ne permet vraiment pas ça (même en utilisant directement FileDescriptor.in).
    Si vraiment c'est indispensable, il y a le JNI. Mais ça ne marche pas en console Eclipse (ce n'est pas une console normale) et ça oblige à recompiler pour Linux et Windows, à toi de voir.
    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
     
    package test.jni;
     
    //imports....
     
    public class CBridge {
    	static {
    			System.loadLibrary("CBridge");
    		}
     
    	private native int getCh();
     
    	private void run() {
    		for(;;)
    		 System.out.println("key:"+getCh());
    	}
     
     
    	public static void main(String[] args) {
    		new CBridge().run();
     
    	}
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    #include <stdio.h>
    #include "test_jni_CBridge.h"
     
    JNIEXPORT jint JNICALL Java_test_jni_CBridge_getCh
      (JNIEnv * env, jobject obj){
    	return getch();
    	// std::cin.get();
    	//return getc(stdin);
      }
    compilation sous minGW
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    set CLASS=CBridge
    javah -classpath ../bin -jni test.jni.%CLASS%
    gcc -c -IC:\j2sdk1.6.0\include -IC:\j2sdk1.6.0\include/win32 -o test_jni_%CLASS%.o test_jni_%CLASS%.c
    rem dlltool -k test_jni_%CLASS%.o -z test_jni_%CLASS%.def
    rem remplacer à la main le @8 par rien
    gcc --shared -o %CLASS%.dll -IC:\j2sdk1.6.0/include -IC:\j2sdk1.6.0\include/win32 test_jni_%CLASS%.c test_jni_%CLASS%.def
    copy *.dll ..

  11. #11
    Membre expérimenté
    Avatar de yotta
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Septembre 2006
    Messages
    1 088
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 088
    Points : 1 540
    Points
    1 540
    Par défaut
    Autant pour moi. L'adresse fournie pointe vers une technique qui permet de faire l'inverse, simuler l'évènement. Vous voulez le capturer en fait, désolé...

Discussions similaires

  1. recuperer la donnée sans appuyer sur enter
    Par bilou_2007 dans le forum C++
    Réponses: 9
    Dernier message: 12/06/2010, 13h32
  2. Réponses: 8
    Dernier message: 11/04/2007, 11h52
  3. lire des entiers sans appuier sur entree
    Par zied.ellouze dans le forum C
    Réponses: 5
    Dernier message: 30/04/2006, 13h00
  4. Réponses: 9
    Dernier message: 10/11/2005, 23h31
  5. Saisir le choix sans avoir à appuyer sur Enter
    Par b_steph_2 dans le forum C++
    Réponses: 7
    Dernier message: 12/07/2005, 11h27

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