Warum können wir nicht Lesen, ein Zeichen zu einem Zeitpunkt aus dem System.in?
Dem folgenden Programm druckt jedes Zeichen geschrieben auf standard, aber nur nach einem neue-Zeile geschrieben worden ist (zumindest auf meinem system!).
public class Test {
public static void main(String[] args) throws java.io.IOException {
int c;
while ((c = System.in.read()) != -1)
System.out.print((char) c);
}
}
Dies verhindert, dass die Leute schreiben Sachen wie "Drücken Sie eine beliebige Taste, um fortzufahren" und zwingt so etwas wie "Drücken Sie die EINGABETASTE, um fortzufahren."
- Was ist der Grund HIERFÜR?
- Ist es eine Einschränkung von Java?
- Ist dieses Verhalten systembedingt (ich bin auf Ubuntu)? Wie funktioniert es auf Mac? Windows?
- Ist es abhängig von der jeweiligen Klemme ich die Anwendung laufen? (Für mich verhält es sich wie dies in Eclipse und im gnome-terminal)
- Gibt es eine Abhilfe?
- siehe meine Antwort im stackoverflow.com/questions/1864076/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Meisten terminals ist line buffered standardmäßig in Java nicht erhalten input, bis ein newline.
Einige alte terminals nur line-buffered input; trotzdem sollte es möglich sein, deaktivieren Sie die Pufferung in den meisten modernen terminal.
Ja.
Ja.
Gibt es Plattform-spezifische hacks.
curse
im Linux-und Unix-ähnlichen Plattformen, und getch() in Windows. Ich bin mir nicht bewusst, cross-Plattform Weg.Verwandte: Warum "Press any key to continue" ist eine schlechte Idee:
Und nach, dass alle lese-System.in demselben Prozess wird Lesen 1 Zeichen nicht warten, für EOL.
exec(new String[]{"/bin/sh","-c","stty -icanon min 1 </dev/tty"})
. Dann setzen Sie diese in einemfinally
block das flag zurücksetzen:exec(new String[]{"/bin/sh","-c","stty icanon </dev/tty"})
siehe meine Antwort in Äquivalente Funktion zu C "_getch()" in Java?
}
System.in
überhaupt obwohl.