it-swarm.com.de

Lassen Sie die Konsole warten, bis eine Benutzereingabe geschlossen ist

Ich habe eine Konsolenanwendung, die nach Durchführung ihrer Aufgaben dem Benutzer eine Rückmeldung geben muss, z. B. "Vorgang abgeschlossen" oder "Vorgang fehlgeschlagen" und der detaillierte Fehler.

Die Sache ist, wenn ich es einfach laufen lasse, wird die Ausgabenachricht gedruckt, aber die Konsole wird kurz danach geschlossen, sodass keine Zeit bleibt, um die Nachricht zu lesen.

Soweit ich mich erinnere, wird in C++ jede Konsolenanwendung mit einem "Zum Beenden beliebige Taste drücken" oder ähnlichem enden. In C # kann ich dieses Verhalten mit einem simulieren 

Console.ReadKey();

Aber wie kann ich das in Java machen? Ich verwende die Scanner-Klasse, aber unter der Voraussetzung, dass "Eingabe" meine Instanz von Scanner ist:

input.next()
System.exit(0);

"Jeder Schlüssel" wird funktionieren, mit Ausnahme der Rückkehr, was hier eine große Sache ist. Irgendwelche Hinweise?

66
makoshichi

In Java wäre dies System.in.read()

81
x4u

Ich möchte hinzufügen, dass das Programm normalerweise nur dann warten soll, wenn es mit einer Konsole verbunden ist. Ansonsten (wie wenn es ein Teil einer pipeline ist) gibt es keinen Punkt, in dem eine Nachricht gedruckt oder gewartet wird. Dafür könnten Sie Javas Console folgendermaßen 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();
    }
}
18
Petr Pudlák

Das Problem bei der Eingabe der Java-Konsole besteht darin, dass sie gepuffert ist und zum Fortfahren eine Eingabetaste benötigt.

Es gibt diese zwei Diskussionen: Erkennen und Bedienen von Tastatur-Richtungstasten in der Java und Java-Tastatureingabeparsung in einer Konsolen-App

Letztere benutzte JLine , um sein Problem zu lösen.

Ich persönlich habe es nicht benutzt.

6
Reverend Gonzo

Sie können einfach nextLine(); als Pause verwenden

import 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, bedeutet, dass Sie anschließend die EINGABETASTE drücken müssen, aber ich fand es besser als scan.next();.

6
MohammadAmin98

Ich habe was x4u gesagt. Eclipse wollte einen try catch-Block um ihn herum, also lasse ich ihn für mich generieren.

try {
        System.in.read();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

Es kann wahrscheinlich alle Arten von Glocken und Pfeifen haben, aber ich denke, für Anfänger, die wollen, dass ein Befehlszeilenfenster nicht aufhört, sollte dies in Ordnung sein.

Ich weiß auch nicht, wie üblich dies ist (dies ist das erste Mal, dass ich Jar-Dateien herstellt), aber es würde nicht von alleine laufen, nur über eine Bat-Datei.

Java.exe -jar mylibrary.jar

Das obige ist, was die bat-Datei im selben Ordner hatte. Scheint ein Installationsproblem zu sein.

Das Eclipse-Tutorial stammt von: http://eclipsetutorial.sourceforge.net/index.html

Einige der Antworten kamen auch aus: Oracle Thread

5
dim_voly

Ich benutzte einen einfachen Hack und bat Windows, cmd-Befehle zu verwenden, und sende es an null.

// 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();
    }    
}
4
Anton Kasiyn
    public static void main(String args[]) {
        Scanner s=new Scanner(System.in);

        System.out.println("Press enter to continue.....");

        s.nextLine();

    }

Diese nextline ist eine ziemlich gute Option, da sie uns hilft, die nächste Zeile auszuführen, wenn die Eingabetaste gedrückt wird 

2
Pranjal Gupta

Ein einfacher Trick:

importieren von Java.util.Scanner; 

/ * Fügen Sie diese Codes am Ende Ihrer Methode hinzu ... * /

Scannereingabe = neuer Scanner (System.in);

System.out.print ("Drücken Sie zum Beenden die Eingabetaste ..."); 

input.nextLine ();

0
S.H.Kashani