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 :

lorsque je ferme une JFrame, la methode finalize implementée ne s'enclenche pas.


Sujet :

Agents de placement/Fenêtres Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2008
    Messages : 30
    Par défaut lorsque je ferme une JFrame, la methode finalize implementée ne s'enclenche pas.
    L'exemple est tout simple.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    package pack1_finalize;
     
    import javax.swing.*;
    import java.awt.event.*;
    import java.awt.*;
     
    public class Main {
     
    	/**
             * @param args
             */
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		new JFrameDim();
    	}
     
    }
     
    class JFrameDim extends JFrame {
     
    	public JFrameDim() {
    		add(new JPanelDim());
    		setSize(400, 600);
    		setVisible(true);
    		addWindowListener(new WindowAdapter() {
    			public void windowClosing(WindowEvent we) {
    				setVisible(false);
    				setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    				dispose();
    				System.gc();
    				System.out.println("harg je ne vois pas les finalize. Suis bien mort???");
    			}
    		});
     
    	}
     
    	public void finalize() {
    		System.out.println("JFrameDim.finalize:");
    	}
    }
     
    class JPanelDim extends JPanel {
     
    	JPanelDim() {
    		setBackground(Color.black);
    	}
     
    	public void finalize() {
    		System.out.println("JPanelDim.finalize:");
    	}
    }
    Lorsque je ferme la JFrame, j'esperais avoir deux lignes *finalize qui s'impriment sur la console et ce n'est pas le cas. Donc je me demande si l'espace alloué est bien rendu.

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 179
    Par défaut
    Citation Envoyé par javanoiid Voir le message
    Lorsque je ferme la JFrame, j'esperais avoir deux lignes *finalize qui s'impriment sur la console et ce n'est pas le cas. Donc je me demande si l'espace alloué est bien rendu.
    Malheureusement, tu ne peux pas savoir quand elle sera exécutée ni même si elle le sera un jour. C'est au bon vouloir du Garbage Collector et même l'appel explicite de System.gc() ne garanti pas que la mémoire sera libérée. En général, elle finit par l'être après un appel explicite, mais il faut quand même un certain temps.

    Fred.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2008
    Messages : 30
    Par défaut
    Donc ce n'est pas une méthode sure (elle a un comportement aléatoire). Donc, il ne faut pas l'utiliser?
    Et si je comprend bien, faire un dispose sur JFrameDim me garantit que je supprime les ressources allouées à la JFrameDim et à tous ses enfants. Mais que deviennent les références à JFameDim (et ses enfants) après le dispose()? Elles seront supprimées?

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 179
    Par défaut
    Citation Envoyé par javanoiid Voir le message
    Donc ce n'est pas une méthode sure (elle a un comportement aléatoire). Donc, il ne faut pas l'utiliser?
    Disons qu'il ne faut pas baser de mécanisme dessus (par exemple on ne peut pas utilise l'idiome RAII comme on le ferait avec un destructeur en C++). Si c'est du code de ménage qui n'est pas indispensable, tu peux le mettre ici.

    Citation Envoyé par javanoiid Voir le message
    Et si je comprend bien, faire un dispose sur JFrameDim me garantit que je supprime les ressources allouées à la JFrameDim et à tous ses enfants. Mais que deviennent les références à JFameDim (et ses enfants) après le dispose()? Elles seront supprimées?
    A terme oui... En fait lorsque le garbage collector détectera que la référence n'est plus utilisée nulle part.

    Fred

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2008
    Messages : 30
    Par défaut
    OK, merci.

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

Discussions similaires

  1. que se passe-t-il lorsqu'on ferme une application ?
    Par Mihalis dans le forum Delphi
    Réponses: 22
    Dernier message: 13/06/2007, 14h45
  2. Réponses: 2
    Dernier message: 20/12/2006, 21h11
  3. Réponses: 4
    Dernier message: 06/10/2006, 13h11
  4. bouton qui ferme une Jframe
    Par menuge dans le forum Agents de placement/Fenêtres
    Réponses: 6
    Dernier message: 24/07/2006, 15h55
  5. Erreur lorsque je ferme une session.
    Par fredangel dans le forum Langage
    Réponses: 13
    Dernier message: 24/05/2006, 16h38

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