Каков наилучший способ записи <tab> нажатия клавиши в Java?

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

  •  25-09-2019
  •  | 
  •  

Вопрос

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

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

Это было полезно?

Решение

Взгляните на JLine.Сам я им не пользовался.Он использует библиотеку DLL Windows (с использованием JNI) и поддерживает Linux для переключения консоли в символьный / необработанный режим вместо буферизованного.Я никогда не пользовался этим раньше, так что используйте на свой страх и риск.Я также не уверен на 100%, решит ли это вашу проблему, но попробовать стоит :)

Редактировать: Я могу подтвердить, что это действительно работает

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

ОТРЕДАКТИРУЙТЕ ЕЩЕ РАЗ: Библиотека действительно содержит автозаполнение (нажатием клавиши tab) для командной строки...Наслаждайтесь :)

Другие советы

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top