Разбор ввода с клавиатуры Java в консольном приложении

Я только начал возиться с JLine для анализа ввода символов в консольном режиме. Вроде хорошо работает, но мне интересно:

Есть ли в JLine неблокирующий способ узнать, доступны ли символы? (например, как kbhit() в Windows.)

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

РЕДАКТИРОВАТЬ: это посимвольный анализ. Я не собираюсь использовать графический интерфейс. Обычный ввод-вывод InputStream в Java в режиме консоли требует, чтобы вы сначала нажали клавишу Enter (например, это только буферизованный ввод). Пожалуйста, не говорите мне, что посимвольный ввод в режиме консоли невозможен в Java; это не так. JLine делает это с помощью переносимого интерфейса с платформо-зависимой реализацией.

Изменить обновление: мне удалось собрать вспомогательный класс для выполнения блокирующего ввода-вывода в рабочем потоке (используя JLine для посимвольного ввода-вывода, предупреждение: вам нужно самостоятельно проанализировать Ctrl-C!), А затем общаться через синхронизированная очередь с подпрограммой isempty (). Для того, что я делаю сейчас, это нормально, но мне бы очень хотелось узнать, как это сделать в будущем.

Не могли бы вы опубликовать отрывок ответа? Смотрится очень интересно.

OscarRyz 09.01.2009 23:40
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
8
1
11 159
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы не можете использовать консоль для получения неблокирующего ввода без собственных библиотек.

Вам нужно будет написать приложение Swing и написать KeyListener

Прочтите это руководство: http://java.sun.com/docs/books/tutorial/uiswing/events/keylistener.html

Ответ принят как подходящий

Кажется, вы на правильном пути.

Я думаю, что «правильный» способ сделать это - рабочий поток, который переливает весь блокирующий ввод-вывод в неблокирующую очередь. Взгляните на ConcurrentLinkedQueue из java.util.concurrent.

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