Ich habe eine Konsolenanwendung, die nach dem Ausführen ihrer Aufgaben dem Benutzer Feedback geben muss, z. B. "Vorgang abgeschlossen" oder "Vorgang fehlgeschlagen" und den detaillierten Fehler.
Die Sache ist, wenn ich es einfach "laufen lasse", wird die Ausgabemeldung gedruckt, aber die Konsole wird kurz danach geschlossen, so dass keine Zeit zum Lesen der Nachricht bleibt.
Soweit ich mich erinnere, endet in C ++ jede Konsolenanwendung mit einem "Drücken einer beliebigen Taste zum Beenden" oder ähnlichem. In C # kann ich dieses Verhalten mit a simulieren
Console.ReadKey();
Aber wie kann ich das in Java machen? Ich verwende die Scannerklasse, aber angesichts der Tatsache, dass "Eingabe" meine Instanz von Scanner ist:
input.next()
System.exit(0);
"Jeder Schlüssel" wird funktionieren, außer für die Rückgabe, was hier eine ziemlich große Sache ist. Irgendwelche Hinweise?
quelle
Ich möchte hinzufügen, dass das Programm normalerweise nur warten soll, wenn es mit einer Konsole verbunden ist. Andernfalls (wie wenn es Teil einer Pipeline ist ) macht es keinen Sinn, eine Nachricht zu drucken oder zu warten. Dafür könnten Sie Java
Console
wie folgt verwenden:import java.io.Console; // ... public static void waitForEnter(String message, Object... args) { Console c = System.console(); if (c != null) { // printf-like arguments if (message != null) c.format(message, args); c.format("\nPress ENTER to proceed.\n"); c.readLine(); } }
quelle
Das Problem bei der Eingabe der Java-Konsole besteht darin, dass die Eingabe gepuffert ist und eine Eingabetaste erforderlich ist, um fortzufahren.
Es gibt diese beiden Diskussionen: Erkennen und Bearbeiten von Tastaturrichtungstasten in Java und Parsen von Java-Tastatureingaben in einer Konsolen-App
Letzterer benutzte JLine , um sein Problem zu lösen.
Ich persönlich habe es nicht benutzt.
quelle
Sie können nur
nextLine();
als Pause verwendenimport java.util.Scanner // // Scanner scan = new Scanner(System.in); void Read() { System.out.print("Press any key to continue . . . "); scan.nextLine(); }
Jede Taste, die Sie drücken, außer,
Enter
dass Sie danach die Eingabetaste drücken müssen, aber ich fand es besser alsscan.next();
quelle
Scanner scan=new Scanner(System.in);
Ich habe einen einfachen Hack verwendet und Windows gebeten, cmd-Befehle zu verwenden und ihn an null zu senden.
// Class for Different hacks for better CMD Display import java.io.IOException; public class CMDWindowEffets { public static void getch() throws IOException, InterruptedException { new ProcessBuilder("cmd", "/c", "pause > null").inheritIO().start().waitFor(); } }
quelle
Ich habe eingegeben, was x4u gesagt hat. Eclipse wollte einen Try-Catch-Block darum herum, also ließ ich ihn für mich generieren.
try { System.in.read(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }
Es kann wahrscheinlich alle möglichen Schnickschnack enthalten, aber ich denke, für Anfänger, die ein Befehlszeilenfenster wünschen, das nicht beendet wird, sollte dies in Ordnung sein.
Ich weiß auch nicht, wie häufig dies vorkommt (dies ist das erste Mal, dass ich JAR-Dateien erstelle), aber es würde nicht von selbst ausgeführt, sondern nur über eine Bat-Datei.
Das Obige hatte die Bat-Datei im selben Ordner. Scheint ein Installationsproblem zu sein.
Das Eclipse-Tutorial stammt von: http://eclipsetutorial.sourceforge.net/index.html
Einige der Antworten kamen auch von: Oracle Thread
quelle
public static void main(String args[]) { Scanner s = new Scanner(System.in); System.out.println("Press enter to continue....."); s.nextLine(); }
Dies
nextline
ist eine ziemlich gute Option, da sie uns hilft, die nächste Zeile auszuführen, wenn die Eingabetaste gedrückt wird.quelle
Ein einfacher Trick:
import java.util.Scanner; /* Add these codes at the end of your method ...*/ Scanner input = new Scanner(System.in); System.out.print("Press Enter to quit..."); input.nextLine();
quelle