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 :

Arrêter un Thread qui contient juste une JFrame


Sujet :

Agents de placement/Fenêtres Java

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2013
    Messages : 35
    Par défaut Arrêter un Thread qui contient juste une JFrame
    Bonjour,

    Je voulais savoir si ,quand je fais un Thread d'une JFrame,faire un dispose() de la JFrame suffise à arrêter le thread ou va t-il tourner en rond?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Thread t= new Thread(MaJframe);
    t.start();
    MaJframe.dispose();

  2. #2
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 713
    Par défaut
    Je ne vois pas bien comment cela peut fonctionner car
    dans ton code, tu indique mettre ton JFrame comme objectif (target) du Thread (voir doc)
    Or quand on écrit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Thread t= new Thread(MonObjet);
    il faut que MonObjet implémente Runnable ce qui n'est pas le cas de JFrame.

    Si tu veux l'ouvrir dans un process séparé, tu peux très bien faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
            java.awt.EventQueue.invokeLater(new Runnable() {
                public void run() {
                    new MaJframe().setVisible(true);
                }
     
            });
    (code proposé par NetBeans chaque fois qu'on veut utiliser un JFrame)
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2013
    Messages : 35
    Par défaut
    Bonjour,
    le Runnable est installé.

    J'ai juste mis les trois lignes que je trouve importante,
    Mon problème n'est pas le démarrage de la fenêtre. Mais l’arrêt de celle si:
    Est ce que si je ferme grâce au dispose(), ma fenêtre ET mon thread s'arrête ou juste la fenêtre.

    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 class MaJFrame extends JFrame implements Runnable{
    	//Avant création du JFrame+ initialisation...
     
            public void run(){
    		setVisible(true);
    	}
    }
     
    public void MonCode(){
                    MaJframe mj= new MaJframe();
    		Thread t = new Thread(mj);
    		t.start();
     
                    //Mon traitement
                    mj.dispose();
    }
    Comme il est déconseillé d'utilise .stop() du Thread je cherche a faire autrement.

    Merci à tous ceux qui se pencheront sur mon problème.

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

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Le setVisible d'une JFrame ne doit surtout pas être réalisé dans un Thread lambda mais uniquement dans l'EventDispatchThread lui même au moyen d'un appel à SwingUtilities.invokeLater.

    En ce qui concerne l'interaction Swing/Threading, la lecture du tutoriel suivant est impérative: http://gfx.developpez.com/tutoriel/j...ing-threading/

  5. #5
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    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 483
    Par défaut
    non le thread ne s'arrête pas. Tu met deux choses différentes dans un même objet, mais ça reste deux choses différentes. Pour arrêter le thread, il faut que ta méthode run() retourne. Donc c'est dans ta méthode run() qu'il faut mettre la logique pour détecter que la frame et fermée et donc arrêter le travail.
    La technique la plus courante c'est de mettre un booléen "finish" à true et de le lire dans le thread. Mais tu dois coder tout ça, ce n'est pas automatique.

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2013
    Messages : 35
    Par défaut
    Merci pour les deux réponses,
    Je regarde le tutoriel dès que possible.Car j'ai quand même de trois JFrame à coder comme ça.

  7. #7
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 713
    Par défaut
    Pour aller plus loin, tu peux nous dire pourquoi tu as envie de mettre un JFrame dans un Thread ?
    Il faut avoir un sérieux motif !
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  8. #8
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2013
    Messages : 35
    Par défaut
    Peu être que je fais une erreur,
    mais quand je lance à partir d'un programme une JFrame, le reste du programme est bloqué, alors que je ne veux justement pas.Donc j'ai penser a utilisé les thread.
    Précisément, je préviens à l'aide de cette JFrame l'état du programme en question, Comme la température de ma machine, la tension qui en sort etc. tout en devant les traiter à coté et faire d'autre action.

    Ma JFrame n'est qu'un affichage mis à jour à l'aide d'Observable/Observer.

    En espérant avoir répondu à ta question.

  9. #9
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2013
    Messages : 35
    Par défaut
    Bon comme tu m'as mis le doute, j'ai réessayé de lancer juste avec la JFrame. Et sa fonctionne....

    Je suis vraiment un boulet. En plus, je suis passé en JDialog justement pour que certaines deviennent bloquante(je m'en rappelai plus)....

    Bon bin, désolé de vous avoir tous dérangé pour rien finalement.

    Et merci à tous

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

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    En fait, toutes les opérations Swing se déroulent dans un Thread spécifique appelé Event Dispatch Thread.

    A vrai dire, il est même fortement recommandé d'instancier et rendre visible ta JFrame directement dans ce thread en englobant ses opération dans un SwingUtilities.invokeLater.

    Le Threads deviennent utilises dès lors que tu effectues des opérations longues/bloquantes depuis ton interface graphique. En effet, il est préférable d'éviter de faire ce genre d'opérations directement dans un Listener, mais plutôt de lancer un Thread effectuant ces opérations depuis le listener.

    Tu en sauras plus après la lecture du tutorial dont j'ai donné le lien.

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

Discussions similaires

  1. Comment arréter un thread qui exécute une instruction bloquante
    Par nibor2luxe dans le forum Concurrence et multi-thread
    Réponses: 15
    Dernier message: 28/02/2008, 17h03
  2. Réponses: 1
    Dernier message: 28/01/2008, 12h21
  3. Réponses: 3
    Dernier message: 10/08/2007, 13h42
  4. Réponses: 6
    Dernier message: 11/05/2006, 16h00
  5. [Debutant] Un thread qui dessine sur une fenetre ???
    Par Spartan03 dans le forum OpenGL
    Réponses: 6
    Dernier message: 05/04/2006, 20h19

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