保留控制台底部的扫描仪输入

问题描述 投票:0回答:1

我目前正在为一个学校项目编写一个小型CLI,该项目旨在介绍套接字编程和多线程编程。我们基本上正在实现一种文件传输协议。我目前在格式化CLI时遇到一些问题。由于具有程序的多线程性质,因此有时会要求输入,然后显示输出。这使得用户和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>”提示,然后显示线程结果的原因。我希望当前的提示始终保持在底部。注意,未添加pwd命令上的&以提高性能。它通常仅用于文件上传和下载命令,但此处以它为例。

我不确定这是否可行,但可以选择其他方法。

只需重申一下,流程很想

Connection Established:已连接到127.0.0.1:5000和127.0.0.1:5001Command 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:5001Command is entered into new thread:mytftp> pwd和Space was made for the prompt and results shown:/ Users / Shawn / Desktop / Computer Science / CSCI4780分布式系统/ Project2 /服务器Next prompt is shown ready for a new command:mytftp>

java io java.util.scanner
1个回答
0
投票

我最终想到的解决方案是使用\r字符并重新排列提示流程。而不是:

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

我选择采用以下架构

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>".

这意味着来自服务器的每条消息都将删除当前提示,但使用回车,然后在其之前添加提示。

© www.soinside.com 2019 - 2024. All rights reserved.