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 :

Warning 'Resource leak'


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné

    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Septembre 2007
    Messages
    214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2007
    Messages : 214
    Par défaut Warning 'Resource leak'
    Bonjour,

    Le code suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Scanner reponse = new Scanner(System.in);
    déclenche un warning (ou du moins, je suppose que c'est un warning : une ampoule avec un triangle, sous Eclipse) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Resource leak: 'reponse' is never closed
    C'est grave docteur ? Que dois-je faire pour corriger ça ?

    Christophe

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 577
    Par défaut
    C'est bien un warning.

    Ce n'est pas bien grave, puisque ce n'est pas toi qui a ouvert System.in. Il n'y a donc pas de raison que ce soit toi qui le ferme. Il se fermera à la fin du programme, comme cela arrive toujours qu'on mette un Scanner dessus ou pas.

    Tu as ce warning parce qu'en général, quand on utilise une ressource fermable pour construire un Scanner, il faut toujours fermer le Scanner (ou la ressource directement, mais c'est pas très bon pour l'encapsulation.)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 394
    Par défaut
    Bonjour,

    Est-ce que si tu fais ceci tu as toujours le warning ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Scanner reponse = null;
    try{
    reponse = new Scanner(System.in);
    // ...
    }finally{
        if(reponse != null){
            reponse.close();
        }
    }
    Romain.

  4. #4
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 577
    Par défaut
    Hum. C'est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Scanner reponse = new Scanner(System.in);
    try{
      // ...
    }finally{
      reponse.close();
    }
    ou en Java 1.7 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    try(Scanner reponse = new Scanner(System.in)){
      // ...
    }
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    +1 avec thelvin pour la meilleure façon de libérer une ressource.

    Mais dans ce cas précis on est dans un des rare cas où l'on ne doit pas libérer la ressource.
    En effet si on ferme System.in on ne pourra plus l'utiliser, et je doute que cela soit voulu...


    Du coup dans ce cas précis, on peut utiliser une annotation pour ignorer le warning :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	// Il ne faut pas fermer System.in !
    	@SuppressWarnings("resource")
    	Scanner scanner = new Scanner(System.in);
    a++

  6. #6
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 577
    Par défaut
    Il serait encore pire de le réutiliser, puisqu'on vient de le mettre dans un Scanner qui va buffuriser tout ce qu'il veut.

    D'un autre côté, on a pas de raison non plus de vouloir le fermer, bien sûr, puisqu'on l'a pas ouvert.

    Conclusion : en réalité on s'en fiche.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

Discussions similaires

  1. Weblogic 9.2: warning resource unavailable
    Par renarde dans le forum Weblogic
    Réponses: 0
    Dernier message: 10/06/2010, 18h25
  2. [MySQL] Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource
    Par oOBaalberithOo dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 15/10/2007, 13h52
  3. [MySQL] Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource
    Par farfella dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 09/10/2007, 11h47
  4. Resource leak avec CodeGuard
    Par moudel dans le forum C++Builder
    Réponses: 1
    Dernier message: 16/05/2007, 11h36
  5. Réponses: 17
    Dernier message: 02/07/2006, 17h58

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