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

时间:2016-08-26 12:58:46

标签: java

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

这是我的代码。

while(true){
System.out.print("> ")
// do stuff
}

问题是每次循环迭代时>都会显示,但是光标在循环开始时闪烁,从而使我的>成为用户输入的一部分。我希望光标在每次循环迭代后>之后闪烁一个空格,并且>也不是下一个行对象的一部分(假设我使用扫描器来解析输入)。任何帮助表示赞赏。

4 个答案:

答案 0 :(得分:0)

如果您真的担心“出色的用户体验”;比只使用“java builtin”控制台功能的任何东西......都不符合这个要求。

因此,如果这对您很重要,我建议您查看为您提供“类似ncurses”功能的各种库,例如charvajava curseslanterna

答案 1 :(得分:0)

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

它不会干扰通过独立stdin / System.in传输的用户输入。

问题是这些缓冲区不可修改,只能附加:一旦你写了一些东西你就不能回来擦除它,所以这样就不可能发出提示闪烁。

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

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

答案 2 :(得分:0)

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

String usrInput = new java.util.Scanner(System.in).next();
System.out.println("Your input was " + usrInput);

答案 3 :(得分:0)

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

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

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