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 :

comment être sur de la fermeture de mon application java


Sujet :

Agents de placement/Fenêtres Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 90
    Par défaut comment être sur de la fermeture de mon application java
    Bonjour à tous!
    je suis en train de développer une application en java, j'ai utilisé plusieurs notions : swing comme interface graphique, je manipule des fichiers xml, connexion jdbc...
    le problème est que si je quitte mon application, le processus javaw.exe relatif ne se ferme pas!!!
    je me suis dis que peut être celà est dû a une ressource qui est encore ouverte (un Frame, conexion jdbc...)!
    pourriez vous, svp, me donner des pistes des idées sur ce point?
    quel partie du code revoir pour être sûr de la libération totale du processus?
    parce que le code deviens de plus en plus long et j'arrive pas suivre l'erreur
    merci d'avance

  2. #2
    Invité de passage
    Inscrit en
    Avril 2008
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 1
    Par défaut
    Bonjour

    Il faut mettre un System.exit(0) dans ton actionPerformed du bouton "Quitter" ou de l'action

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 90
    Par défaut
    Citation Envoyé par dim1205 Voir le message
    Bonjour

    Il faut mettre un System.exit(0) dans ton actionPerformed du bouton "Quitter" ou de l'action
    merci bcp ça marche
    j'ai mis System.console(); par inattention au lieu de System.exit(0)

  4. #4
    Membre éprouvé
    Avatar de Deadpool
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    1 312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 1 312
    Par défaut
    Bonjour,

    Comment tu fermes ta fenêtre graphique? Tu as un bouton dédié? Tu appuie sur la croix en haut à droite (en supposant que tu es sous Windows)?

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


    Lorsque tu utilises Swing, un thread (l'EDT) est automatiquement créer pour gérer l'interface graphique. Ce thread effectue ses tâches en boucle à l'infini.

    Tu dois donc soit appeler explicitement System.exit(), soit utiliser setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) sur ta JFrame, ce qui fera la même chose à la fermeture de la fenêtre...

    a++

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 90
    Par défaut
    merci les gars pour vos réponses!
    le System.exit() et setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) font l'affaire

  7. #7
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    Salut,


    Lorsque tu utilises Swing, un thread (l'EDT) est automatiquement créer pour gérer l'interface graphique. Ce thread effectue ses tâches en boucle à l'infini.

    Tu dois donc soit appeler explicitement System.exit(), soit utiliser setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) sur ta JFrame, ce qui fera la même chose à la fermeture de la fenêtre...
    En fait pas trop non plus, si aucun composant est affiché, que plus rien ne traîne dans les Stack de l'EDT(events natifs ou java), l'EDT se termine tout seul comme un grand (bon c'ewt AWT qui s'en occupe) sans passer par un EXIT_ON_CLOSE (la seule exception à ça est une mauvaise conception de java web start qui fout un poil la merde sur la façon dont l'EDT s'arrête, mais çà c'est une autre histoire).

    Bon ensuite ça ne garatit rien s'il reste de threads autres en mêmoire, ou encore si les composants n'ont pas été disposés mais juste cachés avec un setVisible false.

    Le fait de devoir utiliser un System.exit pour terminer une application java signifie que quelque chose ne tourne pas rond dans un son code (sauf sous web start.


    Plus d'infos dans les liens suivants:
    http://www.pushing-pixels.org/?p=232
    http://www.pushing-pixels.org/?p=369

  8. #8
    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
    Citation Envoyé par sinok Voir le message
    l'EDT se termine tout seul comme un grand
    Tiens j'ignorai que le thread de l'EDT pouvait s'arrêter automatiquement...


    Citation Envoyé par sinok Voir le message
    Bon ensuite ça ne garatit rien s'il reste de threads autres en mêmoire, ou encore si les composants n'ont pas été disposés mais juste cachés avec un setVisible false.
    Par défaut la fermeture des fenêtres se contente de les cacher... donc cela n'arrête pas l'EDT.


    Citation Envoyé par sinok Voir le message
    Le fait de devoir utiliser un System.exit pour terminer une application java signifie que quelque chose ne tourne pas rond dans un son code (sauf sous web start.
    Je ne suis pas vraiment d'accord là dessus. Un system.exit(0) est tout à fait propre et permet justement de s'assurer de la bonne fermeture de l'application (on n'a pas de thread non-daemon qui viendrait nous embêter).

    a++

  9. #9
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    En fait à partir de java 1.4 les helper threads sont terminés par AWT

    “Prior to 1.4, the helper threads were never terminated.Starting with 1.4, the behavior has changed as a result of the fix for 4030718. With the current implementation, AWT terminates all its helper threads allowing the application to exit cleanly when the following three conditions are true:
    * There are no displayable AWT or Swing components.
    * There are no native events in the native event queue.
    * There are no AWT events in java EventQueues.”
    cf http://java.sun.com/javase/6/docs/ap...eadIssues.html


    Je ne suis pas vraiment d'accord là dessus. Un system.exit(0) est tout à fait propre et permet justement de s'assurer de la bonne fermeture de l'application (on n'a pas de thread non-daemon qui viendrait nous embêter).
    Perso je trouve ça un poil bourrin, on ne sait jamais, un thread daemon pourrait être en train de réaliser telle ou telle opération, et l'arrêter de force en plein milieu de sa tâche pourrait poser des problèmes (bon, objectivement, en général on évite de laisser des threads tourner comme ça, donc le System.exit passe, mais dans certains cas le dispose assure que la JVM ne se terminera que quand toutes les actions qu'elle a à réaliser se terminent correctement).

    Mais j'ai l'impression que c'est pas la première fois qu'on en parle d'ailleurs.

  10. #10
    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
    Citation Envoyé par sinok Voir le message
    Perso je trouve ça un poil bourrin, on ne sait jamais, un thread daemon pourrait être en train de réaliser telle ou telle opération, et l'arrêter de force en plein milieu de sa tâche pourrait poser des problèmes
    Mais ce serait le cas avec seulement des dispose() : le thread de l'EDT n'est pas un daemon thread, et c'est pour cela qu'il peut empêcher la fin du programme.

    Lorsqu'il n'y a plus de thread non-daemon, tous les threads daemon sont stoppé...

    Citation Envoyé par sinok Voir le message
    (bon, objectivement, en général on évite de laisser des threads tourner comme ça, donc le System.exit passe, mais dans certains cas le dispose assure que la JVM ne se terminera que quand toutes les actions qu'elle a à réaliser se terminent correctement).
    Seulement les actions de l'EDT

    Et puis de toute manière si on a des traitements à faire à la fermeture, il est préférable de passer par les ShutdownHook

    Citation Envoyé par sinok Voir le message
    Mais j'ai l'impression que c'est pas la première fois qu'on en parle d'ailleurs.
    Pas avec moi (ou alors j'ai oublié )

    a++

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 29/10/2012, 21h25
  2. [Toutes versions] Comment être sur que c'est bien un mail qui est sélectionné
    Par basto dans le forum VBA Outlook
    Réponses: 2
    Dernier message: 02/01/2012, 15h41
  3. [AC-2007] Comment être sur la dernière ligne d'un sous formulaire ?
    Par tibofo dans le forum IHM
    Réponses: 3
    Dernier message: 08/09/2010, 16h45
  4. Réponses: 3
    Dernier message: 19/11/2006, 15h40
  5. [VB]Comment obternir le répertoire ou se trouve mon application ?
    Par Raphs dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 26/04/2006, 08h19

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