web-dev-qa-db-fra.com

Faire en sorte que la console attende qu'une entrée d'utilisateur se ferme

J'ai une application console qui, après avoir exécuté ses tâches, doit donner des informations à l'utilisateur, telles que "opération terminée" ou "opération échouée" et l'erreur détaillée.

Le fait est que, si je le laisse "fonctionner", le message de sortie sera imprimé mais la console se fermera peu de temps après, ne laissant pas le temps de lire le message.

Autant que je me souvienne, en C++, chaque application de la console se terminera par un "appuyez sur une touche pour quitter" ou quelque chose du genre. En C #, je peux simuler ce comportement avec un 

Console.ReadKey();

Mais comment puis-je le faire en Java? J'utilise la classe Scanner, mais étant donné que "input" est mon instance de Scanner:

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

"N'importe quelle touche" fonctionnera, sauf pour le retour, ce qui est très grave ici. Des pointeurs?

66
makoshichi

En Java, ce serait System.in.read()

81
x4u

J'aimerais ajouter que généralement, vous souhaiterez que le programme n'attende que s'il est connecté à une console. Autrement (comme si cela fait partie d'un pipeline ), il est inutile d'imprimer un message ou d'attendre. Pour cela, vous pouvez utiliser la variable Console de Java comme ceci:

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

Le problème avec l'entrée de la console Java est qu'elle a été mise en mémoire tampon et nécessite une touche Entrée pour continuer.

Il y a ces deux discussions: Détecter et agir sur les touches de direction du clavier en Java et Analyse des entrées au clavier Java dans une application console

Ce dernier a utilisé JLine pour résoudre son problème.

Personnellement, je ne l'ai pas utilisé.

6
Reverend Gonzo

Vous pouvez simplement utiliser nextLine(); comme pause

import Java.util.Scanner
//
//
Scanner scan = new Scanner(System.in);

void Read()
{
     System.out.print("Press any key to continue . . . ");
     scan.nextLine();
}

Cependant, n'importe quel bouton sur lequel vous appuyez sauf Enter signifie que vous devrez appuyer sur Entrée après cela, mais je l'ai trouvé meilleur que scan.next();.

6
MohammadAmin98

J'ai mis dans ce que x4u a dit. Eclipse voulait un bloc d'essai, alors je le laissai le générer pour moi.

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

Il peut probablement contenir toutes sortes de cloches et de sifflets, mais je pense que pour les débutants qui souhaitent une fenêtre de ligne de commande ne pas quitter, cela devrait aller.

De plus, je ne sais pas si c'est courant (c'est la première fois que je crée des fichiers jar), mais cela ne fonctionnerait pas tout seul, mais uniquement via un fichier bat.

Java.exe -jar mylibrary.jar

Ce qui précède est ce que le fichier chauve-souris avait dans le même dossier. Semble être un problème d'installation.

Le didacticiel Eclipse est issu de: http://eclipsetutorial.sourceforge.net/index.html

Une partie de la réponse est également venue de: Oracle Thread

5
dim_voly

J'ai utilisé un hack simple, demandant à Windows d'utiliser des commandes cmd et de l'envoyer à 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();

    }

Cette nextline est une très bonne option car elle nous aidera à lire la ligne suivante chaque fois que la touche Entrée est enfoncée 

2
Pranjal Gupta

Un truc simple:

importer Java.util.Scanner; 

/ * Ajoutez ces codes à la fin de votre méthode ... * /

Entrée scanner = nouveau scanner (System.in);

System.out.print ("Appuyez sur Entrée pour quitter ..."); 

input.nextLine ();

0
S.H.Kashani