Warum druckt meine Konsole nicht sofort die vorherige Zeile, wenn ich einen Java-Scanner verwende?
Posted: 24 Dec 2024, 17:36
Ich habe das folgende einfache Java-Programm, das nach einem Benutzernamen (über den Scanner) und einem Passwort (über die Konsole) fragt. Beachten Sie, dass ich dies NICHT in einer IDE wie Eclipse ausführe, sodass dieser Fehler nicht auf meine Situation zutrifft (insbesondere, wenn ich dies auf Powershell ausführe). Wir können immer davon ausgehen, dass eine Konsole existiert.
Hier ist, was ich versucht habe/was erwartet wurde:
Wenn ich das Programm ausführe, werde ich mit
[Benutzer:]< aufgefordert br />wie erwartet. Wenn ich jedoch die EINGABETASTE auf meiner Tastatur drücke, wird der Cursor an den Zeilenanfang gesetzt und geht NICHT zu „PUNKT 1“. Wenn ich erneut die Eingabetaste drücke, fahren wir mit „PUNKT 1“ fort und zeigen den Benutzer wie erwartet an.
Bei laufendem Programm sieht die Konsole so aus:
Code: Select all
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
}
}
Wenn ich das Programm ausführe, werde ich mit
[Benutzer:]< aufgefordert br />wie erwartet. Wenn ich jedoch die EINGABETASTE auf meiner Tastatur drücke, wird der Cursor an den Zeilenanfang gesetzt und geht NICHT zu „PUNKT 1“. Wenn ich erneut die Eingabetaste drücke, fahren wir mit „PUNKT 1“ fort und zeigen den Benutzer wie erwartet an.
Bei laufendem Programm sieht die Konsole so aus:
Code: Select all
[PS C:\..\Password] > java -cp "myBin" Main
User: foo|[ java -cp "myBin" Main
|[ java -cp "myBin" Main
User: foo
User entered was: foo
Enter password: |[ java -cp "myBin" Main
User: foo
User entered was: foo
Enter password:
Password entered: bar
[PS C:\..\Password] > |[