Хранение ввода сканера в нижней части консоли - PullRequest
0 голосов
/ 22 февраля 2020

В настоящее время я написал небольшой CLI для школьного проекта, который намеревается представить Socket Programming и Multi-Threading Programming. Мы в основном реализуем тип протокола передачи файлов. В настоящее время у меня есть несколько проблем с форматированием CLI. Поскольку программа имеет многопоточный характер, иногда требуются входные данные, а затем отображаются выходные данные. Это делает общее взаимодействие между пользователем и интерфейсом командной строки неудобным, поскольку теперь пользователи должны вводить данные после того, как произошли выходные данные.

Мне было интересно, есть ли способ со стандартным Java I / O, чтобы вход всегда оставался в нижней части CLI, даже когда поступают новые сообщения.

Для Например, выходные данные в настоящее время выглядят примерно так:

Connected to 127.0.0.1:5000 and 127.0.0.1:5001
mytftp> pwd
/Users/Shawn/Desktop/Computer Science/CSCI4780 Distributed Systems/Project2/server
mytftp> pwd &
mytftp> 
/Users/Shawn/Desktop/Computer Science/CSCI4780 Distributed Systems/Project2/server
ls
.DS_Store
sdf
clientFile.txt
mytftp> 

Но я ожидаю что-то вроде этого:

Connected to 127.0.0.1:5000 and 127.0.0.1:5001
mytftp> pwd
/Users/Shawn/Desktop/Computer Science/CSCI4780 Distributed Systems/Project2/server
mytftp> pwd &
/Users/Shawn/Desktop/Computer Science/CSCI4780 Distributed Systems/Project2/server
mytftp> ls
.DS_Store
sdf
clientFile.txt
mytftp> 

Примечание: "&" здесь означает "выполнить эту команду на отдельная тема ". Вот почему во время следующего выполнения сначала отображается приглашение «mytftp>», а затем отображаются результаты потока. Я бы хотел, чтобы текущая подсказка всегда оставалась на дне. Примечание: команда & on pwd не добавлена ​​для повышения производительности. Обычно он используется только для команд выгрузки и загрузки файлов, но здесь он используется в качестве примера.

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

Просто повторюсь, поток хотел бы :

Connection Established: Подключен к 127.0.0.1:5000 и 127.0.0.1:5001
Command is entered into new thread: mytftp> pwd &
Next prompt is shown ready for a new command: mytftp>

Как только появятся результаты для pwd &, я бы хотел, чтобы приглашение было сброшено:

Connection Established: Подключено к 127.0.0.1:5000 и 127.0.0.1 : 5001
Command is entered into new thread: mytftp> pwd &
Space was made for the prompt and results shown: / Users / Shawn / Desktop / Computer Science / CSCI4780 Распределенные системы / Project2 / server
Next prompt is shown ready for a new command: mytftp>

1 Ответ

0 голосов
/ 23 февраля 2020

Решением, которое я в итоге придумал, было использование символа \r и перестановка потока подсказок. Вместо:

while true:
    show prompt
    get input
    do some socket programming here

Я выбрал go со следующей схемой

show prompt
while true:
    get input
    do some socket programming here and each socket response (system.out) should start with \r, followed by the message, followed by "\nmytftp>".

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

...