我有一个等待用户输入的命令行应用程序。我想将>
显示为提示。
这是我的代码。
while(true){
System.out.print("> ")
// do stuff
}
问题是每次循环迭代时>
都会显示,但是光标在循环开始时闪烁,从而使我的>
成为用户输入的一部分。我希望光标在每次循环迭代后>
之后闪烁一个空格,并且>
也不是下一个行对象的一部分(假设我使用扫描器来解析输入)。任何帮助表示赞赏。
答案 0 :(得分:0)
如果您真的担心“出色的用户体验”;比只使用“java builtin”控制台功能的任何东西......都不符合这个要求。
因此,如果这对您很重要,我建议您查看为您提供“类似ncurses”功能的各种库,例如charva,java curses或lanterna。
答案 1 :(得分:0)
当您使用System.out.print
或大多数其他输出命令时,您实际上将文本放在stdout
/ System.out
中,您的控制台将检查该文本以显示所述文字。
它不会干扰通过独立stdin
/ System.in
传输的用户输入。
问题是这些缓冲区不可修改,只能附加:一旦你写了一些东西你就不能回来擦除它,所以这样就不可能发出提示闪烁。
某些控制台可能会处理BACKSPACE 0x08
ascii控制字符以删除前一个字符,但我不会依赖它。
可能有其他方法可以授予您对控制台文本缓冲区的读/写权限,但我怀疑使用它比编写GUI要容易得多。我建议您使用特定于您的控制台的语言(bash
,powershell
等)或实施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_");
}
我不建议以这种方式处理输入,但它会为您提供您所追求的视觉效果。