Debutante en java

Résolu/Fermé
chaimaa - Modifié par KX le 5/07/2015 à 11:18
 chaimaa - 5 juil. 2015 à 13:42
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
A voir également:

1 réponse

KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
5 juil. 2015 à 11:33
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"
0
@KX vraiment un grand merci pour tes explications, maintenant je comprends la raison de cet avertissement merci encore une fois ..
0