IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

avec Java Discussion :

Equivalent de system("pause");


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Août 2008
    Messages
    145
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 145
    Par défaut Equivalent de system("pause");
    Bonjour,

    Je débute en Java et j'aimerai retrouver un équivalent de system("pause") en C.

    J'ai donc créer cette méthode :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public static void pause(){
    		Scanner pause = new Scanner(System.in);
    		System.out.println("Appuyer sur une touche pour continuer...");
    		pause.nextLine();
     
    	}
    Je ne plus qu'a l'appeler dans le main avec pause(); et cela fonctionne parfaitement avec toutefois un petit warning :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Ressource leak : 'pause' is never closed
    Après une petite recherche sur le net je vois qu'il suffit de rajouter pause.close(); pour résoudre le problème.

    Ce que je fait comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public static void pause(){
    		Scanner pause = new Scanner(System.in);
    		System.out.println("Appuyer sur une touche pour continuer...");
    		pause.nextLine();
                    pause.close();
     
    	}
    Plus de warning, mais plantage lors de la 2eme pause quand je lance le programme.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Exception in thread "main" java.util.NoSuchElementException: No line found
    	at java.util.Scanner.nextLine(Unknown Source)
    	at poo.pause(poo.java:64)
    	at poo.main(poo.java:31)
    Si quelqu'un peux m'explique le pourquoi du comment ce serai très sympa.
    Merci !

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Ton Scanner utilise System.in
    Donc quand tu close() ton Scanner, tu close() aussi System.in
    Or on ne peut pas se servir d'une ressource sur laquelle on a appelé close()

    Ce qu'il faut, c'est créer un seul Scanner et ne le fermer qu'une seule fois. Donc dans ton cas, le créer au début du programme et le fermer à la fin.
    En fait, en réalité il n'y a pas besoin de fermer System.in (parce qu'on ne le ferme qu'à la fin et que c'est un flux de lecture, pas d'écriture, donc de toute façon ça va se faire tout seul.) Tu peux donc te passer de close() ton Scanner.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre confirmé
    Inscrit en
    Août 2008
    Messages
    145
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 145
    Par défaut
    Ok, donc je peux ignorer ce warning sans soucis.

    Merci

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par Almenor Voir le message
    Ok, donc je peux ignorer ce warning sans soucis.
    Non. Il faut créer un seul Scanner sur System.in
    Il ne faut pas en créer un chaque fois que tu veux attendre.

    Mais le close(), lui, n'est pas utile.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre confirmé
    Inscrit en
    Août 2008
    Messages
    145
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 145
    Par défaut
    Ha...

    Donc je dois mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Scanner pause = new Scanner(System.in);
    en début du main et
    en fin de main. (comme ça plus de warning, c'est plus propre)

    Du coup ma méthode ne contient plus que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public static void pause(){
    		System.out.println("Appuyer sur une touche pour continuer...");
    	}
    et au final je dois quand même écrire 2 lignes pour "pauser"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    pause();
    pause.nextLine();
    Bon, on ne dois pas écrire "Appuyer sur une touche pour continuer..." à chaque fois, c'est déjà ça de gagné.

  6. #6
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Qu'est-ce qui t'empêche de faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private static final Scanner pause = new Scanner(System.in);
    ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

+ Répondre à la discussion
Cette discussion est résolue.

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo