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

Interfaces Graphiques en Java Discussion :

Thread et destruction d'un composant


Sujet :

Interfaces Graphiques en Java

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 4
    Par défaut Thread et destruction d'un composant
    Bonjour à tous,

    L'objectif de mon programme est de créer une sorte de chronomètre.
    J'ai donc créé un composant qui hérite d'un JLabel. Celui-ci écoute un événement "onTimer" que j'ai développé pour l'occasion avec une interface et un listener. Il lance aussi un thread pour que mon chronomètre s'incrémente chaque seconde. L'utilisateur de ce composant peut définir ce qu'il souhaite effectuer à chaque interval.
    Tout fonctionne correctement sauf que si je ferme ma fenêtre qui contient le chronomètre, le thread continu. Si je ferme l'application il continue également ...

    Ma question est donc, comment arrêter un thread lorsque le composant (ici un JLabel) se détruit ? Car j'ai beau me creuser la tête, le chronomètre doit s'arrêter à ce moment là sans demander à l'utilisateur d'arrêter le chronomètre avec un bouton avant de quitter l'application.

    J'espère avoir été clair, sinon n'hésitez pas à me poser des questions.
    Je vous remercie de m'avoir lu.
    Julien

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    a mon avis ce serait plutot lorsque tu ferme la fenetre (évènement) que tu devrais demander à ton timer de s'arrêter. Poru ce qui est d'arrêter un thread, généralement on fait surveiller régulièrement par le thread un champ boolean qu'on fait passer à true, et il fait un return quand ça se produit.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 4
    Par défaut
    Bonjour,
    Merci pour ta réponse. Pour l'arrêt du thread, je n'ai pas de soucis si l'utilisateur souhaite l'arrêter en cliquant sur un bouton par exemple car j'ai effectivement utilisé un booléen à l'intérieur.
    L'événement de la fenêtre peut servir aussi cependant cela oblige le programmeur qui va utiliser mon composant à rajouter dans son code la méthode pour arrêter le chronomètre. Hors, j'aimerai qu'il s'arrête automatiquement lorsque le composant se détruit ou si l'application se termine. En gros, je reproduis le timer que l'on peut retrouver en delphi, lorsque l'on crée le timer, nous pouvons implémenter le code dans l'événement "ontimer". Il se coupera si l'on sort de l'application quoiqu'il arrive.
    Julien

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Citation Envoyé par Jacensolo Voir le message
    Hors, j'aimerai qu'il s'arrête automatiquement lorsque le composant se détruit ou si l'application se termine. En gros, je reproduis le timer que l'on peut retrouver en delphi, lorsque l'on crée le timer, nous pouvons implémenter le code dans l'événement "ontimer". Il se coupera si l'on sort de l'application quoiqu'il arrive.
    Julien
    Pour l'arret de l'application si ton thread a bien été mis "setDaemon(true)", il n'y aura pas de soucis. Pour détecter l'inutilité du composant, tu as deux possibiltés

    1) implémenter finalize() et dedans notifier le thread, ca réagira lorsque le composant sera garbage collecté. Attention, le thread ne dois pas garder de référence au composant sinon il ne pourra pas être garbage collecté
    2) Détecter dans le thread que le composant a été garbage collecté.

    dans les deux cas, la référence thread -> composant devra se faire via un objet WeakReference.

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 4
    Par défaut
    Bonsoir,
    Merci encore une fois pour ton aide.
    J'ai déjà mis le setdeamon à true et j'ai aussi implémenter la méthode finalize.
    Il me reste donc à creuser WeakReference.
    Je teste et je reviens

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 4
    Par défaut
    Pour simplifier mon projet, je lance un timer lorsque je clique sur un bouton. Et en fait, le timer ne s'arrête pas lorsque je ferme la fenêtre. Bien sur je pourrais faire un stop lors de la fermeture de la fenêtre mais ça me semble vraiment bizarre que le timer tourne encore après la fermeture du programme ...

  7. #7
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Citation Envoyé par Jacensolo Voir le message
    ça me semble vraiment bizarre que le timer tourne encore après la fermeture du programme ...
    C'est plutot le programme java, qui ne s'arrête pas tant que tu as au moins un thread non deamon qui tourne toujours.

Discussions similaires

  1. Création et destruction dynamique de composants visuels
    Par Dr.Gang dans le forum C++Builder
    Réponses: 3
    Dernier message: 16/10/2009, 17h19
  2. [Thread] et destruction par fermeture appli
    Par Droïde Système7 dans le forum Débuter
    Réponses: 8
    Dernier message: 15/12/2008, 19h17
  3. Violation d'acces lors d'une destruction d'un composant
    Par Rayek dans le forum Composants VCL
    Réponses: 15
    Dernier message: 23/11/2005, 11h37
  4. Coût de création et destruction de thread
    Par camboui dans le forum Windows
    Réponses: 41
    Dernier message: 02/06/2005, 12h36
  5. Création dynamique de composants et destruction
    Par cpdump dans le forum Composants VCL
    Réponses: 4
    Dernier message: 19/01/2005, 17h57

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