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

SWT/JFace Java Discussion :

[SWT]Quand et comment faut-il "disposer" ?


Sujet :

SWT/JFace Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2003
    Messages : 59
    Par défaut [SWT]Quand et comment faut-il "disposer" ?
    Voilà une petite question que je me pose :

    Dans une application SWT :
    On crée un shell principal et des shell "secondaires" pour les Dialog par exemple...

    Prenons un Dialog avec :
    - 1 image
    - 2 panneaux
    - 2 boutons

    Dans une méthode privée, je crée et j'initialise tous ces éléments.

    La méthode "open" que j'utilise comme un setVisible(true) en SWING est la suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public void open() {
    		try {
    			dialogShell.open();
    			Display display = dialogShell.getDisplay();
    			while (!dialogShell.isDisposed()) {
    				if (!display.readAndDispatch())
    					display.sleep();
    			}
    		} catch (Exception e) {
    			e.printStackTrace();
    			logger.error("error", e);
    		}
    	}
    le "dialogShell" est le shell que j'utilise pour afficher la dialog.

    Quand je demande de fermer la dialog, j'appelle une méthode "close" comme celle qui suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public void close() {
    		dialogShell.dispose();
    	}
    Etant donné que les panneaux et autres boutons ont été créés en passant le dialogShell en paramètre; je suppose que je ne doit pas les désallouer moi-même.

    Mais qu'en est-il des images ?

    En fait, comment savoir ce qu'il écrire dans la méthode "close" de mes interfaces graphiques qui étendront des Dialog ou dans la méthode "dispose" surchargée des interfaces qui étendront des Composite ?

    Comment être sur et certain que tout à bien été désallouer lorsqu'on ferme une Dialog ou qu'on désire effacer un Composite ?


    Merci d'avance pour vos réponses !

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Août 2006
    Messages
    218
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Août 2006
    Messages : 218
    Par défaut
    Bonjour,

    Voici un article qui explique cela : http://www.eclipse.org/articles/swt-...-design-2.html

    Pour résumer :

    a) Si tu créé une ressource (image, police de caractères), tu dois la libérer

    Exemple : si tu fais cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Font font = new Font (display, "Courier", 10, SWT.NORMAL);
    Quand tu n'as plus besoin de ta fonte, il faut la libérer :
    Par contre, si tu n'appelles pas un constructeur, c'est inutile de faire un dispose :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Font font = control.getFont ();
    b) La libération du père libère les enfants

    Quand tu fais un dispose sur un shell, tous ses enfants sont libérés, quand tu
    fait un dispose sur un menu, les "items" seront libérés...

    Pour vérifier que tu as bien libéré tes ressources, tu as un outil qui s'appelle "sleak" :
    http://www.eclipse.org/swt/tools.php

    En espérant t'avoir aidé,

    Laurent

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2003
    Messages : 59
    Par défaut
    oui, merci beaucoup

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2009
    Messages : 25
    Par défaut SWT
    En effet, je rajouterais juste que si tu développes une grosse application, je te conseille de ne pas passer par le constructeur, ta mémoire est mieux gérée quand tu passes par le ImageRegistry et cela évite les erreurs.

    ++
    Spirit

Discussions similaires

  1. Réponses: 3
    Dernier message: 14/02/2010, 10h06

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