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

Java Discussion :

Faire un EXIT propre


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné Avatar de billynirvana
    Homme Profil pro
    Architecte technique
    Inscrit en
    Décembre 2004
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2004
    Messages : 472
    Par défaut Faire un EXIT propre
    Bonjour,

    Je suis en cours de développement d'une application dont la classe qui contient le main possède grosomodo 3 méthodes principales:

    - init()
    - launchWindow()
    - finalize()

    Dans init(), j'ouvre pas mal de flux notamment des sockets.
    Dans launchWindow(), je crée la fenetre graphique.
    Dans finalize(), je libère les ressources utilisées (et initialisées dans init()).

    Si je code de la facon suivante, ca plante:

    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
    public final class Appli {
    
    	public final static void main(String[] args) {
    		Appli appli = new Appli();
    
    		appli.init();
    		appli.launchWindow();
    
    		appli.finalize(); <--- PROBLEME!!!
    	}
    
    	public Appli() {}
    
    	public void init() { ... }
    	public void launchWindow() { ... }
    	public void finalize() { ... }
    }
    La raison est surement parce que launchWindow() n'est pas bloquant. finalize est tout de suite appelée apres launchWindow() et donc j'ai un nullPointerException


    Je ne vois pas comment m'en sortir... Peut etre est ce du à une mauvaise conception...


    Si vous avez des idées ou propositions pour résoudre mon problème, je suis preneur!!


    Merci d'avance,

    Billy

  2. #2
    Membre Expert Avatar de maxf1
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 229
    Par défaut
    C'est dans ta methode finalize qu'il y a un nullPointer.

    Regarde bien la stackTrace de ton plantage et va à la ligne indiqué.

    NUllPointer => Signifie que tu appel une methode sur un object null

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    String s = null;
    s.indeOf("1"); // <= la il va y avoir un nullPointer

  3. #3
    Expert confirmé
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Par défaut
    Il faut que tu appelles finalize() à la fermeture de ta fenêtre, pour cela, il faut que tu ajoutes un WindowListener et que lors de la l'appel de la méthode windowClosing, tu appelles finalize().

  4. #4
    Membre chevronné Avatar de billynirvana
    Homme Profil pro
    Architecte technique
    Inscrit en
    Décembre 2004
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2004
    Messages : 472
    Par défaut
    J'ai un windowListener dans la classe correspondant à ma fenetre. Je dois également ajouter cette implémentation dans ma classe Appli ?

  5. #5
    Membre chevronné Avatar de billynirvana
    Homme Profil pro
    Architecte technique
    Inscrit en
    Décembre 2004
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2004
    Messages : 472
    Par défaut
    J'ai essayé mais cela ne marche pas. je n'y arrive pas!

    J'ai vérifié les logs Eclipse et le nullPointerException apparait dans l'appli lorsque je veux envoyer des données sur la socket [socket is null] (la méthode qui cradosse se trouve dans la classe qui étend JFrame)

  6. #6
    Membre émérite
    Homme Profil pro
    Inscrit en
    Octobre 2004
    Messages
    398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2004
    Messages : 398
    Par défaut
    Citation Envoyé par billynirvana
    J'ai essayé mais cela ne marche pas. je n'y arrive pas!

    J'ai vérifié les logs Eclipse et le nullPointerException apparait dans l'appli lorsque je veux envoyer des données sur la socket [socket is null] (la méthode qui cradosse se trouve dans la classe qui étend JFrame)
    t'aas une classe qui étend de JFrame
    dans le constructeur de ta classe, lorsque tu définis la fenetre, a la fin, tu appelles initialise
    tu appelles ensuite launchWindow
    dans ta classe, tu définis un WindowListener pour la fermeture de ta fenetre
    c'est la que tu mettras le finalize()

  7. #7
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Par défaut
    Attention, il est fortement recommandé de ne PAS utiliser la méthode finalize() pour libérer des ressources.
    En effet, il n'est pas garantie que celle-ci soit appelée. Et si tu l'appelle explicitement (chose qu'il ne faut pas faire), il peut y avoir des problèmes si elle est réappelée lors de la destruction de l'objet (par exemple tentative d'un flux déjà fermé lors du précédent appel à finalize()).

    Il vaut mieux écrire une méthode par toi même, par exemple nommée exit(), qui s'occupe de libérer les ressources (ou tout autre tâche de ton choix).
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster ;) (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag :resolu:

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

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

Discussions similaires

  1. [windows mobile] faire une appli propre
    Par crischprolch dans le forum Windows
    Réponses: 3
    Dernier message: 14/07/2008, 21h35
  2. Userform faire du code propre
    Par lipaika dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 07/01/2008, 11h36
  3. Réponses: 7
    Dernier message: 14/12/2007, 09h02
  4. Faire un Exit Function
    Par Poussy-Puce dans le forum ASP.NET
    Réponses: 6
    Dernier message: 16/01/2007, 06h58
  5. [Débutant] Faire un exit avec &
    Par thybo dans le forum C++
    Réponses: 7
    Dernier message: 23/11/2004, 20h33

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