Я пишу консольное приложение на Java. Это похоже на чат-клиент: ввод и вывод производятся асинхронно. Проблема в том, что если какой-то вывод будет сделан, пока пользователь печатает, строки будут смешиваться на экране.
Я ищу решение, которое позволило бы мне иметь область ввода отдельно от области вывода. На данный момент я использую дополнительный поток, который опрашивает BufferedReader на System.in.
Программа должна быть запущена на сервере Linux и доступна через сеанс ssh. Так что любые советы, которые работают только в этой среде, подойдут.
Существуют ли библиотеки высокого уровня, которые могут это сделать? Или есть хитрый трюк, использующий коды терминала / ANSI? Коды ANSI s (сохранить курсор) и r (восстановить курсор) могут быть полезны, но как мне узнать, куда нужно перейти, чтобы выполнить вывод, и как мне управлять прокруткой?