En Java, quelle est la meilleure façon de capturer une séquence de touches ?

StackOverflow https://stackoverflow.com/questions/4608854

  •  25-09-2019
  •  | 
  •  

Question

Je ne parviens pas à capturer l'élément combinaison de touches dans mon application de ligne de commande Java. En utilisant System.in.read () Je ne semble pas obtenir quoi que ce soit en frappant la touche de tabulation. Quelle est la meilleure façon d'aborder ce sujet?

Pour donner un peu de contexte, je suis en train de permettre à un utilisateur de frapper l'onglet mi-commande clé pour avoir la commande saisie semi-automatique (un peu comme vous pouvez le faire dans un shell bash). Je suis ouvert aux suggestions s'il y a de meilleures approches pour y parvenir (peut-être en utilisant System.in.read () n'est pas le meilleur angle pour aborder ce sujet?).

Était-ce utile?

La solution

Jetez un oeil à JLine . Je ne l'ai pas utilisé moi-même. Il utilise une DLL Windows (en utilisant JNI) et il a un support linux pour changer la console caractère / mode brut au lieu du mode tampon. Je ne l'ai jamais utilisé auparavant afin d'utiliser à vos propres risques. Je suis pas sûr à 100% si elle traitera votre problème, mais sa vaut le coup:)

EDIT: Je peux confirmer qu'il ne fonctionne

ConsoleReader cr = new ConsoleReader();
while (cr.readVirtualKey() != 0x09){
  //loop till Tab is pressed
}

EDIT DE NOUVEAU: La bibliothèque contient saisie semi-automatique (par onglet pression) pour la ligne de commande ... Amusez-vous:)

Autres conseils

Je suppose que votre shell capture onglet et l'empêchant de se rendre à votre application. Il ne peut pas être tout ce que vous pouvez faire à ce sujet ...

Les données d'un InputStream sont disponibles uniquement lorsque l'utilisateur a appuyé sur Entrée. Je pense que vous verrez que si vous appuyez sur Entrée après, l'onglet sera affiché.

Dans les applications c, il y a quelque chose de semblable: une coque fixe le mode d'entrée brut de cuisson, car il a besoin des frappes premières. Readline est la bibliothèque normale utilisée pour cette sous Linux. Je ne sais pas ce qui est commun sous Windows. Pour autant que je peux penser, quelque chose en utilisant JNI est la seule option ici.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top