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 :

Programme encore en mémoire après Arrêt (?)


Sujet :

avec Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 15
    Points : 14
    Points
    14
    Par défaut Programme encore en mémoire après Arrêt (?)
    Bonjour,

    J'ai réalisé une application Java qui tourne très bien sur Eclipse.
    Pas de soucis.

    Je l'ai extraite en Jar exécutable,
    pas de soucis, je retrouve la même chose qu'avec eclipse,
    avec mes images et tout..... ça marche.

    Problème : Si je tente d'effacer mon Jar,
    et si je l'ai utilisé depuis l'ouverture de ma session Windows,
    Windows m'affiche un refus....
    Le programme semble encore utilisé même une fois arrêté.

    Mes objets sont instanciés par new()
    mais le ramasse-miettes Java (je crois qu'on l'appelle comme ça)
    ne semble pas faire le ménage quand les objets sont délaissés.

    Peut-on forcer le ramasse-miettes à libérer toute la mémoire
    juste après fermeture (avec croix X) du dernier objet affiché ?

    Merci.
    Il est vrai que je peux effacer mon jar simplement en fermant ma session,
    mais cela n'est pas très 'propre'.

    Merci beaucoup
    Gilles

  2. #2
    Expert éminent sénior
    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
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    Le ramasse-miettes fait proprement son travail : tu n'as pas à le forcer à le faire !!!

    Ici le problème vient de ton code : par défaut la fermeture d'une fenêtre (avec croix X) ne ferme pas le programme mais se contente de cacher la fenêtre...

    Ton programme tourne encore !!!

    Pour fermer proprement la fenêtre tu dois utiliser setDefaultCloseOperation() sur ta frame...

    a++

  3. #3
    Expert confirmé

    Homme Profil pro
    SDE
    Inscrit en
    Août 2007
    Messages
    2 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : SDE

    Informations forums :
    Inscription : Août 2007
    Messages : 2 013
    Points : 4 324
    Points
    4 324
    Par défaut
    j'ajouterais même : http://java.sun.com/j2se/1.4.2/docs/...eOperation(int)

    Sinon on peut demander au gc de passer avec System.gc(). Mais comme adiGuba le dit très justement, ce n'est pas un problème de gc, mais ton application tourne encore.
    http://alaindefrance.wordpress.com
    Certifications : SCJP6 - SCWCD5 - SCBCD5 - SCMAD1
    SDE at BitTitan

  4. #4
    Expert éminent sénior
    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
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Alain Defrance Voir le message
    Sinon on peut demander au gc de passer avec System.gc().
    Attention car à moins de maitriser complètement les mécanismes du GC, je déconseille cela fortement. Dans la plupart des cas cela ne fera que dégrader les performances en faisant travailler le GC inutilement...

    a++

  5. #5
    Expert confirmé

    Homme Profil pro
    SDE
    Inscrit en
    Août 2007
    Messages
    2 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : SDE

    Informations forums :
    Inscription : Août 2007
    Messages : 2 013
    Points : 4 324
    Points
    4 324
    Par défaut
    Oui d'ailleurs je ne voulais pas la conseille mais seulement signaler son existance. Me suis-je peut-être mal exprimé
    http://alaindefrance.wordpress.com
    Certifications : SCJP6 - SCWCD5 - SCBCD5 - SCMAD1
    SDE at BitTitan

  6. #6
    Membre habitué
    Inscrit en
    Mars 2008
    Messages
    254
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mars 2008
    Messages : 254
    Points : 188
    Points
    188
    Par défaut
    salut ,

    j'ai pas compris ça :


    Pour fermer proprement la fenêtre tu dois utiliser setDefaultCloseOperation() sur ta frame???


    Merci d'avance?

  7. #7
    Expert confirmé

    Homme Profil pro
    SDE
    Inscrit en
    Août 2007
    Messages
    2 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : SDE

    Informations forums :
    Inscription : Août 2007
    Messages : 2 013
    Points : 4 324
    Points
    4 324
    Par défaut
    Dans ta frame ajoute dans le constructeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    http://alaindefrance.wordpress.com
    Certifications : SCJP6 - SCWCD5 - SCBCD5 - SCMAD1
    SDE at BitTitan

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Février 2005
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 119
    Points : 192
    Points
    192
    Par défaut
    Salut,

    Citation Envoyé par javadoc
    Unlike a Frame, a JFrame has some notion of how to respond when the user attempts to close the window. The default behavior is to simply hide the JFrame when the user closes the window. To change the default behavior, you invoke the method setDefaultCloseOperation(int). To make the JFrame behave the same as a Frame instance, use setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE).
    Plus de détails .

  9. #9
    Membre habitué
    Inscrit en
    Mars 2008
    Messages
    254
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mars 2008
    Messages : 254
    Points : 188
    Points
    188
    Par défaut
    Merci bien,

  10. #10
    Expert éminent sénior Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 562
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 562
    Points : 15 493
    Points
    15 493
    Par défaut
    Lorsequ'une fenetre se ferme, il peux se passer plusieurs chose en fonction du comportement qu'on lui a défini au préalable via setDefaultCloseOperation():
    • DO_NOTHING : la fenetre reste affichée, il ne se passe rien, si on veux cacher ou fermer la fenètre il faut faire setVisible(false) ou dispose().
    • HIDE : La fenêtre est juste cachée comme si on avait fait setVisible(false). L'application n'est donc pas arrétée.
    • DISPOSE : la fenêtre est détruite comme si on avait fait dispose() dessus. S'il ne reste pas d'autre élément graphique de base, l'application se termine.
    • EXIT_ON_CLOSE : Toute l'application est terminée de force comme si on avait fait System.exit(0). L'application se termine même s'il reste d'autre éléments graphique de base.

  11. #11
    Membre habitué
    Inscrit en
    Mars 2008
    Messages
    254
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mars 2008
    Messages : 254
    Points : 188
    Points
    188
    Par défaut
    c'est claire, merci Uther

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 15
    Points : 14
    Points
    14
    Par défaut
    Ouah merci à tous...
    Je conserve ces informations précieusement.

    :-)

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

Discussions similaires

  1. Programmer encore en VB 6 c'est pas bien ? Pourquoi ?
    Par Nektanebos dans le forum Débats sur le développement - Le Best Of
    Réponses: 85
    Dernier message: 10/03/2009, 14h43
  2. Mémoire après exécution du programme
    Par Woufeil dans le forum C++
    Réponses: 14
    Dernier message: 23/08/2006, 01h33
  3. Lancer deux programmes d'installation un après l'autre
    Par annedeblois dans le forum Windows
    Réponses: 21
    Dernier message: 01/08/2006, 21h04
  4. Réponses: 10
    Dernier message: 13/02/2006, 08h30
  5. libération de la mémoire après traitement ?
    Par isachat666 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 07/12/2005, 19h29

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