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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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 : 44
    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 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    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
    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/

+ 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