Analyse d'entrée de clavier Java dans une application de console
je viens de commencer à jouer avec JLine pour analyser l'entrée des caractères en mode console. Cela semble bien fonctionner, mais je me demande:
y a-t-il un moyen non-bloquant dans JLine pour savoir si les caractères sont disponibles? (c'est à dire comme kbhit()
dans Windows.)
je suppose que je pourrais toujours envelopper l'entrée de clavier dans son propre thread qui offre ensuite les caractères de clavier dans une queue thread-safe à la thread principal, mais qui semble comme il devrait être inutile.
EDIT : c'est l'analyse des caractères. Je ne vais pas utiliser d'interface graphique. L'Entrée/Sortie InputStream habituelle en Java en mode console vous demande d'appuyer sur la touche Entrée en premier (par exemple, c'est une entrée avec tampon seulement). S'il vous plaît, ne me dites pas que la saisie caractère par caractère en mode console est impossible en Java; ce n'est pas le cas. JLine le fait en utilisant une interface portable avec une implémentation dépendante de la plate-forme.
Edit update : j'ai été capable de hacker ensemble une classe helper pour faire le blocage des entrées/sorties dans un worker thread (en utilisant JLine pour les entrées/sorties par caractère, attention: vous devez analyser Ctrl-C vous-même!) et puis communiquer via une file d'attente synchronisée avec une routine isempty (). Pour ce que je fais en ce moment, c'est bien, mais j'aimerais vraiment savoir une bonne façon de le faire à l'avenir.
2 réponses
Vous semblez être sur la bonne voie.
je pense que la" bonne " façon de faire ceci est un fil ouvrier qui verse toutes les entrées/sorties de blocage dans une file d'attente non-bloquante. Hava un coup d'oeil à ConcurrentLinkedQueue à partir de de java.util.simultané .
vous ne pouvez pas utiliser une console pour obtenir des entrées non-bloquantes sans bibliothèques natives.
vous devrez écrire une application Swing et écrire un KeyListener
lire ce tutoriel: http://java.sun.com/docs/books/tutorial/uiswing/events/keylistener.html