我有以下简单的 Java 程序,它要求输入用户名(通过扫描仪)和密码(通过控制台)。请注意,我没有在 Eclipse 等 IDE 中运行此程序,因此该错误不适用于我的情况(特别是我在 powershell 上运行此程序)。我们可能总是假设控制台存在。
import java.io.Console;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Console console = System.console();
System.out.print("User: ");
String user = sc.nextLine();
System.out.println("\r\n");
System.out.println("User entered was: " + user); //POINT 1
String password = new String(console.readPassword("Enter password: "));
System.out.println("\r\n");
System.out.println("Password entered: " + password); //POINT 2
}
}
这是我尝试过的/预期的:
当我运行该程序时,它会提示我 [用户:] 正如预期的那样。但是,当我按键盘上的 ENTER 时,它将光标移至行首并且不会继续到“POINT 1”。当我再次按 Enter 键时,我们将继续执行“POINT 1”并按预期显示用户。
[PS C:\..\Password] > java -cp "myBin" Main
User: foo|[<---BLINKING CURSOR]
[PS C:\..\Password] > java -cp "myBin" Main
|[<---BLINKING CURSOR]User: foo
[PS C:\..\Password] > java -cp "myBin" Main
User: foo
User entered was: foo
Enter password: |[<---BLINKING CURSOR]
[PS C:\..\Password] > java -cp "myBin" Main
User: foo
User entered was: foo
Enter password: <non-echoed characters 'bar'>
Password entered: bar
[PS C:\..\Password] > |[<---BLINKING CURSOR] #program ended at "POINT 2".
编辑:尝试这是CMD(Windows 11)后,似乎问题是powershell......有人有解决方法吗?
Java 的
System.out
是缓冲的,这意味着输出不一定会立即显示。当您使用 System.out.print
时,输出可能会保留在缓冲区中,直到:
\n
或 System.out.println
这可能会导致程序在等待输入时出现暂停的情况。
您可以在
System.out.flush()
之前使用 scanner.nextInt();
以确保输出立即写入控制台。另一种选择是使用 System.out.println
而不是 System.out.print
示例:
System.out.println("Enter a number:");
int number = scanner.nextInt();