В Java, как лучше всего запечатлеть <tab>нажатие клавиши? - PullRequest
4 голосов
/ 05 января 2011

У меня проблемы с захватом нажатия клавиши в моем приложении командной строки Java. Используя System.in.read (), я ничего не получаю при нажатии клавиши табуляции. Как лучше всего подойти к этому?

Чтобы дать некоторый контекст, я пытаюсь разрешить пользователю нажимать среднюю команду клавиши табуляции, чтобы она автоматически завершила команду (так же, как вы могли бы это сделать в оболочке bash). Я открыт для предложений, если есть лучшие подходы для достижения этого (возможно, использование System.in.read () не лучший подход для достижения этого?).

Ответы [ 3 ]

7 голосов
/ 05 января 2011

Посмотрите на JLine .Я не использовал это сам.Он использует Windows DLL (с ​​использованием JNI) и имеет поддержку linux для переключения консоли в символьный / необработанный режим вместо буферизованного режима.Я никогда не использовал это раньше, поэтому используйте на свой страх и риск.Я также не уверен на 100%, решит ли он вашу проблему, но стоит попробовать ВНОВЬ РЕДАКТИРОВАТЬ: Библиотека содержит автозаполнение (при нажатии клавиши Tab) для командной строки ...

0 голосов
/ 05 января 2011

Данные из InputStream доступны только тогда, когда пользователь нажал Enter.Я думаю, вы обнаружите, что если вы нажмете Enter после вкладки, вкладка будет отображаться.

В приложениях c, есть что-то похожее: оболочка устанавливает режим ввода для raw из готовых, так как она нуждается всырые нажатия клавиш.Readline - это обычная библиотека, используемая для этого в Linux.Я не уверен, что распространено в Windows.Насколько я могу судить, что-то, использующее JNI, является единственным вариантом здесь.

0 голосов
/ 05 января 2011

Я думаю, ваша оболочка захватывает вкладку и не позволяет ей попасть в ваше приложение.С этим ничего не поделаешь ...

...