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




Вы не можете использовать консоль для получения неблокирующего ввода без собственных библиотек.
Вам нужно будет написать приложение Swing и написать KeyListener
Прочтите это руководство: http://java.sun.com/docs/books/tutorial/uiswing/events/keylistener.html
Кажется, вы на правильном пути.
Я думаю, что «правильный» способ сделать это - рабочий поток, который переливает весь блокирующий ввод-вывод в неблокирующую очередь. Взгляните на ConcurrentLinkedQueue из java.util.concurrent.
Не могли бы вы опубликовать отрывок ответа? Смотрится очень интересно.