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

Agents de placement/Fenêtres Java Discussion :

JFrame et GarbageCollector


Sujet :

Agents de placement/Fenêtres Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    442
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 442
    Par défaut JFrame et GarbageCollector
    Bonjour,

    J'ai juste une petite interrogation par rapport aux JFrame :

    Mettons que je fasse un setVisible(false) sur une JFrame, puis que celle-ci ne soit plus référencée, càd qqc comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    JFrame f = new JFrame();
    ...
    f.setVisible(false);
    f = null;
    en gros.

    Est-ce que la JFrame sera garbage collectée ?

    Merci

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Comme tout objet java, il est nettoyable par le GC dès qu'il n'y a plus de référence qui permette de l'atteindre. Donc en gros, quand il n'est plus à l'écran et que ton code n'y fait plus référence.

  3. #3
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    442
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 442
    Par défaut
    Ok.

    Je me posais la question parce qu'une fenêtre non référencée mais visible ne sera pas garbage collectée (fort heureusement)...

    Merci pour tes explications.

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Comme tout objet java, il est nettoyable par le GC dès qu'il n'y a plus de référence qui permette de l'atteindre. Donc en gros, quand il n'est plus à l'écran et que ton code n'y fait plus référence.
    Salut,

    je pensais qu'il fallait faire un dispose() pour ça (qu'un setVisible(false) n'était pas suffisant que toutes les références internes à SWING sur la JFrame soient supprimées)
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    442
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 442
    Par défaut
    Euh... Conclusion ?

  6. #6
    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,

    Citation Envoyé par Sharcoux Voir le message
    Je me posais la question parce qu'une fenêtre non référencée mais visible ne sera pas garbage collectée (fort heureusement)...
    En fait il existe toujours une référence vers une fenêtre visible...

    Citation Envoyé par joel.drigo Voir le message
    je pensais qu'il fallait faire un dispose() pour ça (qu'un setVisible(false) n'était pas suffisant que toutes les références internes à SWING sur la JFrame soient supprimées)
    Il faut bien appeler dispose() pour complètement libérer les ressources utilisées par la fenêtre.
    Mais il ne s'agit pas de ressources géré par le Garbage Collector, mais de ressource système.


    a++

  7. #7
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    Il faut bien appeler dispose() pour complètement libérer les ressources utilisées par la fenêtre.
    Mais il ne s'agit pas de ressources géré par le Garbage Collector, mais de ressource système.
    Ca c'est ce que dit clairement la doc. En revanche, ce qui est moins clair, c'est si un setVisible(false) est invoqué et que le code appelant n'a plus de référence sur la frame, c'est qu'elle puisse être "garbagée" (j'entends par là "éligible comme libérable par le Garbage Collector") dans ce cas : ce qui signifie qu'on pourrait permettre de libérer une frame dont les ressources système associées non pas été libérées.
    C'est juste pour comprendre et savoir... dans l'absolu, à mon avis, il ne faut jamais perdre une référence sur une jframe sans l'avoir disposée, ou s'être arranger pour qu'elle le soit, par un frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE) par exemple. Un appel à setVisible(false) n'étant nécessaire que si on veut pourvoir réafficher la jframe.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  8. #8
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    le dispoe set si tu veux libérer les ressources système tout en gardant une référence vers ta fenêtre. Par exemple, tu as une fenêtre avec beaucoup d'images / icones, etc, mais tu ne l'affiche que de temps e temps. Entre deux, tu peux faire un dispose(), le prochain appel à setVisible(true) recréera les ressources système.

    Oui, une fenetre non visible où dispose() n'a pas été appelé et pour laquelle le GC peux la collecter libèrera ses ressources système lors du passage du gc. dispose() permet juste de le faire plus tôt.


    Conclusion: une JFrame au niveau du GC se comportent comme n'importe quel autre objet. Il faut juste faire attention qu'en interface graphique, on oublie vite une référence à gauche ou à droite. Par exemple , on oublie vite que la fenetre visible et inévitablement enregistrée dans l'event dispatcher

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

Discussions similaires

  1. Appelant de jFrame
    Par OSboots dans le forum Agents de placement/Fenêtres
    Réponses: 6
    Dernier message: 16/05/2004, 17h47
  2. [JFrame][JScrollPane] rafraichissement
    Par iuz dans le forum Agents de placement/Fenêtres
    Réponses: 5
    Dernier message: 14/05/2004, 11h08
  3. [JDialog] JDialog ou JFrame ?
    Par Mister Nono dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 25/04/2004, 21h55
  4. Comment mettre une image en fond de JFrame
    Par marc26 dans le forum Débuter
    Réponses: 3
    Dernier message: 19/01/2004, 17h57
  5. Faire une JFrame avec LookAndFeel
    Par aburner dans le forum Agents de placement/Fenêtres
    Réponses: 5
    Dernier message: 03/12/2003, 08h54

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