Debutante en java [Résolu/Fermé]

Signaler
-
 chaimaa -
Bonjour, Bonjour, je suis débutante en java, j'ai un petit problème avec ce code, il marche bien mais je ne sais pas pourquoi il me signale ceci : " resource leak 'sc'is never closed" dans le programme !!

package projet1;

import java.util.Scanner;

public class chai {

 
    public static void main(String[] args) 
    {
        Scanner sc=new Scanner(System.in);
        System.out.println("enter text: ");
        String str=sc.nextLine();
        System.out.println("le text saisi est: "+str);
    }
}

merci bien

1 réponse

Messages postés
16365
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
16 juin 2021
2 845
Bonjour,

Ce n'est qu'un avertissement, rien de bien grave.

Java s'attend à ce que tout objet qui implémente l'interface Closeable (ce qui est le cas de Scanner) appelle explicitement la méthode close() afin de libérer le flux et éviter de le garder en mémoire pour rien. C'est ce que l'on appelle une perte de ressource ("leak resource" en anglais).

Cependant, dans le cas de System.in je te déconseille de fermer le flux, car il serait ensuite impossible de le rouvrir...

Tu peux mettre une annotation sur la variable sc pour indiquer à Java d'ignorer cet avertissement dans le cas où tu manipules System.in

@SuppressWarnings("resource") // System resource should never be closed
Scanner sc = new Scanner(System.in);

En revanche, si tu ouvres une autre ressource avec Scanner, par exemple un fichier, il faudra absolument fermer le flux, sinon le fichier restera ouvert pour rien.

Scanner sc = new Scanner(new File("toto.txt"));
...
sc.close(); // close file "toto.txt"
@KX vraiment un grand merci pour tes explications, maintenant je comprends la raison de cet avertissement merci encore une fois ..