Разделение ввода / вывода в консольном приложении Java - PullRequest
4 голосов
/ 03 сентября 2010

Я пишу консольное приложение на Java. Это похоже на чат-клиент: ввод и вывод производятся асинхронно. Проблема в том, что если какой-то вывод будет сделан, пока пользователь печатает, строки будут смешиваться на экране.

Я ищу решение, которое позволило бы мне иметь область ввода отдельно от области вывода. На данный момент я использую дополнительный поток, который опрашивает BufferedReader на System.in.

Программа должна быть запущена на сервере Linux и доступна через сеанс ssh. Так что любые советы, которые работают только в этой среде, подойдут.

Существуют ли библиотеки высокого уровня, которые могут это сделать? Или есть хитрый трюк, использующий коды терминала / ANSI? Коды ANSI s (сохранить курсор) и r (восстановить курсор) могут быть полезны, но как мне узнать, куда нужно перейти, чтобы выполнить вывод, и как мне управлять прокруткой?

Ответы [ 2 ]

2 голосов
/ 03 сентября 2010

Я помню, давно работал с похожими вещами, но в C ++.Я тогда использовал библиотеку ncurses .Посмотрите javacurses , который, кажется, является реализацией Java чего-то вроде ncurses.

1 голос
/ 03 сентября 2010

Похоже, вам нужно использовать проклятия. JCurses - это Java-реализация библиотеки Curses, которая дает вам контроль над терминалом, позволяя прокручивать, позиционировать и т. Д.

...