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

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

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

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

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

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

2 ответов


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

Я думаю, что "правильный" способ сделать это-рабочий поток, который выливает весь блокирующий ввод-вывод в неблокирующую очередь. Hava a look at ConcurrentLinkedQueue С java.утиль.параллельный.


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

вам придется написать приложение Swing и написать KeyListener

читать этот учебник: http://java.sun.com/docs/books/tutorial/uiswing/events/keylistener.html