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

 Java Discussion :

Creation d'un thread


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de snay13
    Homme Profil pro
    Inscrit en
    Juin 2009
    Messages
    236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2009
    Messages : 236
    Par défaut Creation d'un thread
    Bonjour

    Apres avoir lu plusieurs tuto et fais des essais, j'ai des problemes à comprendre l'execution d'une tache dans un thread separe

    mon application réalise un envoi de mail et j'aimerais que pendant l'envoi mon appli ne reste pas bloquer

    voici mon code executé dans un action performed de ma fenetre principale

    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
    18
    19
    20
     
    String fichier = TAB_Model.getValueAt(TAB_RacinePath.getSelectedRow(),
            TAB_RacinePath.getSelectedColumn()).toString();
    FenetreMail FEN_Mail = new FenetreMail(this, "mail", true);
    String[] texte = FEN_Mail.setDialog(); FEN_Mail.dispose();
    ManagerMail envoiMail = new ManagerMail();
    envoiMail.setTo(texte[0]); envoiMail.setSubject(texte[1]);
    envoiMail.setMessage(texte[2]); envoiMail.setFile(fichier);
    int result = envoiMail.sendMail();
     
          if( result == 0)
          {
                 FenetreMessageFrame dialog = new FenetreMessageFrame(this, "dialogOk", true,
                                "Le mail a correctement été envoyé"); dialog.dispose();
           }
           else
           {
                 FenetreMessageFrame dialog = new FenetreMessageFrame(this, "dialogOk", true,
                                "Le mail n'a été envoyé : Vérifiez les paramètres");   dialog.dispose();
            }
    Comment integrer un thread pour ne pas bloquer mon appli?

    Merci

  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
    Voir ce cours sur l'utilisation de swingworker


    http://rom.developpez.com//java-swingworker/

  3. #3
    Membre éclairé Avatar de snay13
    Homme Profil pro
    Inscrit en
    Juin 2009
    Messages
    236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2009
    Messages : 236
    Par défaut
    Merci pour le lien pour le tuto, je le connaissais pas

    Entre temps je viens de réussir à débloquer mon appli en faisant

    main :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ThreadMail threadMail = new ThreadMail(texte, fichier, this);
    threadMail.start();
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    class ThreadMail extends Thread
    {
        private String[] texte;
        private String fichier;
        private JFrame parent;
        private int result;
        ThreadMail (String[] fin, String fichier, JFrame parent)
        {   this.texte = fin; this.fichier = fichier; this.parent = parent;     }
        @Override
        public void run ()
        {
            FenetreMessageFrame dial = new FenetreMessageFrame(parent, "envoi", true, "Envoi en cours ...", "");
            dial.dispose();
            ManagerMail envoiMail = new ManagerMail();
            envoiMail.setTo(texte[0]); envoiMail.setSubject(texte[1]);
            envoiMail.setMessage(texte[2]); envoiMail.setFile(fichier);
            result = envoiMail.sendMail();
     
            if( result == 0)
            {
                FenetreMessageFrame dialog = new FenetreMessageFrame(parent, "dialogOk", true,
                    "Le mail a correctement été envoyé", texte[0] + " : " + fichier); dialog.dispose();
            }
            else
            {
                FenetreMessageFrame dialog = new FenetreMessageFrame(parent, "dialogOk", true,
                    "Le mail n'a été envoyé : Vérifiez les paramètres", texte[0] + " : " + fichier); dialog.dispose();
            }
        }
    }
    Est ce correct par rapport à l'EDT?

  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
    ta premier fenetre dial, que tu dispose juste après, ne sert à rien.

    Quand à FenetreMessageFrame, sa création endehors de l'EDT est à éviter. Ca passera vraissemblablement sans soucis avec du swing pur, mais ce n'est pas réglementaire (toute opération graphique DOIT se faire dans l'EDT) et tu n'a pas de garantie que ça marchera toujours sans soucis dans le futur

    En l'occurence, ton code peux très facilement être adapté pour utiliser bien proprement swingworker

  5. #5
    Membre éclairé Avatar de snay13
    Homme Profil pro
    Inscrit en
    Juin 2009
    Messages
    236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2009
    Messages : 236
    Par défaut
    j'ai modifié mon code pour integrer swingWorker

    Mais le return dans doInBackground me chagrine je ne comprends pas à quoi il correspond du coup je l'ai mis à null

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    swingWorkerTest swingWorker = new swingWorkerTest(texte, fichier, this);
    swingWorker.execute();
     
    //ThreadMail threadMail = new ThreadMail(texte, fichier, this);
    //threadMail.start();
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    class swingWorkerTest extends SwingWorker<Object, Object>
    {
     
        private String[] texte;
        private String fichier;
        private JFrame parent;
        private int result;
        public swingWorkerTest(String[] fin, String fichier, JFrame parent)
        {
            this.texte = fin; this.fichier = fichier; this.parent = parent;
        }
     
     
        @Override
        protected Object doInBackground() throws Exception
        {
            FenetreMessage dial = new FenetreMessage(parent, "envoi", true, "Envoi en cours ...", "");
            dial.dispose();
            ManagerMail envoiMail = new ManagerMail();
            envoiMail.setTo(texte[0]); envoiMail.setSubject(texte[1]);
            envoiMail.setMessage(texte[2]); envoiMail.setFile(fichier);
            result = envoiMail.sendMail();
     
            if( result == 0)
            {
                FenetreMessage dialog = new FenetreMessage(parent, "dialogOk", true,
                    "Le mail a correctement été envoyé", texte[0] + " : " + fichier); dialog.dispose();
            }
            else
            {
                FenetreMessage dialog = new FenetreMessage(parent, "dialogOk", true,
                    "Le mail n'a été envoyé : Vérifiez les paramètres", texte[0] + " : " + fichier); dialog.dispose();
            }
            return null;
        }
     
    }
    Est ce la bonne methode??

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

Discussions similaires

  1. creation d'un thread
    Par khadi8 dans le forum Débuter
    Réponses: 4
    Dernier message: 18/01/2013, 22h42
  2. probleme sur creation d un thread
    Par zit_zit dans le forum C#
    Réponses: 3
    Dernier message: 07/06/2008, 19h00
  3. [C#] creation d'un thread
    Par todier dans le forum C#
    Réponses: 5
    Dernier message: 30/05/2007, 17h01
  4. temps de creation d'un thread
    Par Micromalice dans le forum Delphi
    Réponses: 1
    Dernier message: 14/01/2007, 21h16
  5. [MFC] Creation d'un thread pour un popup d'attente
    Par firejocker dans le forum MFC
    Réponses: 8
    Dernier message: 07/02/2006, 09h15

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