Java 在无限循环中显示命令提示

Java 在无限循环中显示命令提示,java,Java,我有一个等待用户输入的命令行应用程序。我想显示作为提示 这是我的密码 while(true){ System.out.print("> ") // do stuff } 问题是每次循环迭代时,都会显示,但在循环开始时光标会闪烁,从而使我的成为用户输入的一部分。我希望每次循环迭代时,光标在之后闪烁一个空格,并且不是下一行对象的一部分(假设我使用扫描仪解析输入)。感谢您的帮助。如果您真的担心“出色的用户体验”;而不是只使用“java内置”控制台函数的任何东西。。。不符合这一要求 因此,如果这

我有一个等待用户输入的命令行应用程序。我想显示
作为提示

这是我的密码

while(true){
System.out.print("> ")
// do stuff
}
问题是每次循环迭代时,
都会显示,但在循环开始时光标会闪烁,从而使我的
成为用户输入的一部分。我希望每次循环迭代时,光标在
之后闪烁一个空格,并且
不是下一行对象的一部分(假设我使用扫描仪解析输入)。感谢您的帮助。

如果您真的担心“出色的用户体验”;而不是只使用“java内置”控制台函数的任何东西。。。不符合这一要求

因此,如果这对您很重要,我建议您查看提供“类似课程”功能的各种库,例如,或者。

如果您真的担心“出色的用户体验”;而不是只使用“java内置”控制台函数的任何东西。。。不符合这一要求


因此,如果这对您很重要,我建议您查看提供“ncurses-like”功能的各种库,like,or。

当您使用
System.out.print
或大多数其他输出命令时,您实际上是将文本放入
stdout
/
System.out
,您的控制台将检查以显示所述文本

它不会干扰通过独立的
stdin
/
系统传输的用户输入

问题是这些缓冲区是不可修改的,只是可附加的:一旦你写了一些东西,你就不能再回来擦除它,所以用这种方式不可能做出提示闪烁

一些控制台可能会处理BACKSPACE
0x08
ascii控制字符来擦除前一个字符,但我不会依赖它


可能还有其他方法可以授予您对控制台文本缓冲区的读/写访问权限,但我怀疑使用它会比编写GUI容易得多。我建议您使用特定于控制台的语言(
bash
powershell
,等等)来实现您的程序,或者实现GUI。

当您使用
System.out.print
或大多数其他输出命令时,您实际上是在
stdout
/
System.out
,,您的控制台将检查以显示所述文本

它不会干扰通过独立的
stdin
/
系统传输的用户输入

问题是这些缓冲区是不可修改的,只是可附加的:一旦你写了一些东西,你就不能再回来擦除它,所以用这种方式不可能做出提示闪烁

一些控制台可能会处理BACKSPACE
0x08
ascii控制字符来擦除前一个字符,但我不会依赖它

可能还有其他方法可以授予您对控制台文本缓冲区的读/写访问权限,但我怀疑使用它会比编写GUI容易得多。我建议您使用特定于您的控制台的语言(
bash
powershell
,等等)来实现您的程序,或者实现GUI。

我同意@Aaron的观点,即“>”不会成为用户输入的一部分,您可以通过在System.out.print(“>”)下面添加行来验证这一点

我同意@Aaron的说法,即“>”不会成为用户输入的一部分,您可以通过在System.out.print(“>”)下添加下面的行来验证这一点


如果您只是询问如何更改while循环,使其在>之后闪烁:

 System.out.print(">_");
 while(true) {
   Thread.sleep(400);
   System.out.print("\b ");
   Thread.sleep(400);
   System.out.print("\b_");
  }

我不建议以这种方式处理输入,但它将为您提供所需的视觉效果。

如果您只是询问如何更改while循环,使其在>之后闪烁:

 System.out.print(">_");
 while(true) {
   Thread.sleep(400);
   System.out.print("\b ");
   Thread.sleep(400);
   System.out.print("\b_");
  }

我不建议以这种方式处理输入,但它将为您提供所需的视觉效果。

只需从用户输入中删除
?我希望命令提示符显示在
之后。这不是我得到的行为。你用什么来获取输入?你只是在问如何更改
while
循环,使其在>之后闪烁?你是在IDE中运行代码吗?如果是这样,您的问题可能与他的问题重复:只需从用户输入中删除
?我希望命令提示符出现在
之后。这不是我得到的行为。你用什么来获取输入?你只是在问如何更改
while
循环,使其在>之后闪烁?你是在IDE中运行代码吗?如果是这样的话,你的问题可能与他重复:如果我把它放在while循环之外,它不会在循环第二次迭代时出现,但自然地,这不是行为,我在寻找。如果我把它放在while循环之外,它不会在循环第二次迭代时出现,但自然地,这不是行为,我在寻找。