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 :

[Thread]Savoir si un thread s'est bien termin�.


Sujet :

Java

  1. #1
    Membre �m�rite
    Profil pro
    Architecte technique
    Inscrit en
    Mars 2002
    Messages
    966
    D�tails du profil
    Informations personnelles :
    �ge : 52
    Localisation : France

    Informations professionnelles :
    Activit� : Architecte technique

    Informations forums :
    Inscription : Mars 2002
    Messages : 966
    Par d�faut [Thread]Savoir si un thread s'est bien termin�.
    Bonjour � tous,

    Je voudrais avoir des conseils pour le probl�me suivant.

    J'ai cr�e une interface graphique, qui quand on appui sur un bouton valider lance un traitement assez long (gan�ration d'un fichier PDF). Or pour que l'interface ne se g�le pas, j'ai mis la g�n�ration de ce fichier dans un Thread lanc� depuis l'interface graphique.

    Or il peut arriver que la g�n�ration de se fichier se passe mal (le fichier xml ou xsl-fo n'est pas trouv� par exemple). Donc je voudrais afficher le status de la g�n�ration dans un JTextField de mon interface. Or le probl�me est que je dois savoir si le Thread lanc� par mon interface s'est termin� correctement.

    Alors comme dois-je proc�der ?

    Merci pour vos conseils.

  2. #2
    Membre confirm�
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    77
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 77
    Par d�faut
    Le plus propre je crois est d'utiliser un listener.

    En gros, ton interface �coute le traitement du Thread qui l'informe de son execution.

  3. #3
    Membre �m�rite
    Profil pro
    Architecte technique
    Inscrit en
    Mars 2002
    Messages
    966
    D�tails du profil
    Informations personnelles :
    �ge : 52
    Localisation : France

    Informations professionnelles :
    Activit� : Architecte technique

    Informations forums :
    Inscription : Mars 2002
    Messages : 966
    Par d�faut
    Mais existe t-il d�j� des listeners de Thread ?

  4. #4
    Membre confirm�
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    77
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 77
    Par d�faut
    Citation Envoy� par thibaut
    Mais existe t-il d�j� des listeners de Thread ?
    Tu fais ton propre Listener :

    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 MonPanneau implements MyConversionListener {
     
       // ....
     
      private void lancerConversion() {
         ConversionHandler h = new ConversionHandler(this);
         new Thread ... {
            h.lanceConversion();
         }
      }
     
      public void maConversionEstFinie() {
         monTextField.setText("Conversion terminée");
      }
     
    }
    Et ton ConversionHandler prends en param�tre un MyConversionListener qu'il informe lorsque la conversion est termin�e.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
     
    public interface MyConversionListener {
       public void maConversionEstFinie(); 
    }
    C'est plus clair ?

  5. #5
    Membre �m�rite
    Profil pro
    Architecte technique
    Inscrit en
    Mars 2002
    Messages
    966
    D�tails du profil
    Informations personnelles :
    �ge : 52
    Localisation : France

    Informations professionnelles :
    Activit� : Architecte technique

    Informations forums :
    Inscription : Mars 2002
    Messages : 966
    Par d�faut
    C'est bon j'ai trouv�, la solution, il suffit de passer la r�f�r�nce � mon JTextField dans mon Thread...

    Merci � tous

  6. #6
    Membre confirm�
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    77
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 77
    Par d�faut
    Citation Envoy� par thibaut
    C'est bon j'ai trouv�, la solution, il suffit de passer la r�f�r�nce � mon JTextField dans mon Thread...

    Merci � tous
    C'est pas tr�s propre comme solution, avec un listener tu peux utiliser ta conversion � plusieurs endroits, l� ce n'est pas le cas.

    N'oublies pas de marquer r�solu ce thread.

  7. #7
    Membre �m�rite
    Profil pro
    Architecte technique
    Inscrit en
    Mars 2002
    Messages
    966
    D�tails du profil
    Informations personnelles :
    �ge : 52
    Localisation : France

    Informations professionnelles :
    Activit� : Architecte technique

    Informations forums :
    Inscription : Mars 2002
    Messages : 966
    Par d�faut
    Oui mais un listener m'oblige de cr�er un autre Thread pour �couter et mettre � jour le JTextField.

    Oui chef je met r�solu d�s que quelqu'un peut �ventuellement me donner un meilleure solution ...

    PS: J'ai un peu �t� mod�rateur avant...

  8. #8
    Membre confirm�
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    77
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 77
    Par d�faut
    Citation Envoy� par thibaut
    Oui mais un listener m'oblige de cr�er un autre Thread pour �couter et mettre � jour le JTextField.

    Oui chef je met r�solu d�s que quelqu'un peut �ventuellement me donner un meilleure solution ...

    PS: J'ai un peu �t� mod�rateur avant...
    Et avec mes 33 messages, je pese pas lourd

    C'est marrant je suis aussi � Chatillon.

    Pour le listener, je ne vois pas pourquoi ca t'oblige � cr�er un Thread, que tu passes ton JTextField ou une Interface, ca revient au meme, l'interface est plus g�n�rique et peut servir dans d'autres cas.

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


    Tu pourrais utiliser la classe SwingWorker pour cela :
    Tu trouveras plein d'info sur cette classe dans le forum GUI et/ou AWT/Swing

    a++

  10. #10
    Membre �m�rite
    Profil pro
    Architecte technique
    Inscrit en
    Mars 2002
    Messages
    966
    D�tails du profil
    Informations personnelles :
    �ge : 52
    Localisation : France

    Informations professionnelles :
    Activit� : Architecte technique

    Informations forums :
    Inscription : Mars 2002
    Messages : 966
    Par d�faut
    Citation Envoy� par otsgd
    [..]C'est marrant je suis aussi � Chatillon.
    Cool

  11. #11
    Membre Expert
    Avatar de �om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par d�faut
    Citation Envoy� par thibaut
    Oui mais un listener m'oblige de cr�er un autre Thread pour �couter et mettre � jour le JTextField.
    Euh, non pas vraiment...

    Pourquoi faire cela?

    Il suffit de mettre � jour par SwingUtilities.invokeLater(...) (tu es oblig� de faire cela � partir de ton Thread pour respecter la r�gle du Thread unique d'interface graphique, ou alors tu utilises SwingWorker comme l'a dit adiGuba...)

  12. #12
    Membre exp�riment�
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    194
    D�tails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 194
    Par d�faut
    Citation Envoy� par thibaut
    Cool
    Citation Envoy� par �om
    Euh, non pas vraiment...

  13. #13
    Membre �m�rite
    Profil pro
    Architecte technique
    Inscrit en
    Mars 2002
    Messages
    966
    D�tails du profil
    Informations personnelles :
    �ge : 52
    Localisation : France

    Informations professionnelles :
    Activit� : Architecte technique

    Informations forums :
    Inscription : Mars 2002
    Messages : 966
    Par d�faut
    Merci pour vos r�ponses en tout cas.

    J'ai utilis� le SwingWorker de adiGuba (le super-boss). Par contre le SwingWorker bloque mon bouton, est-ce normal ?

    Merci

  14. #14
    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 thibaut
    adiGuba (le super-boss).
    N'exag�ront rien !


    Citation Envoy� par thibaut
    Par contre le SwingWorker bloque mon bouton, est-ce normal ?
    Comment tu l'utilises ? on pourrait voir ton code ?

    a++

  15. #15
    Membre �m�rite
    Profil pro
    Architecte technique
    Inscrit en
    Mars 2002
    Messages
    966
    D�tails du profil
    Informations personnelles :
    �ge : 52
    Localisation : France

    Informations professionnelles :
    Activit� : Architecte technique

    Informations forums :
    Inscription : Mars 2002
    Messages : 966
    Par d�faut
    Le voici:

    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
            bGenerer.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {            
                    final SwingWorker worker = new SwingWorker() {
     
                        protected Object doInBackground() throws Exception {
                            PdfGenerator generator = new PdfGenerator(); 
                            String result = "Ok";
                            try {
                                generator.run(xslFile.getText(), xmlFile.getText(), output.getText());
                            } catch (Exception e) {
                                result = e.getMessage();
                            }
     
                            return result;
                        }
                    };
     
                    worker.run();
     
                    try {
                        message.setText((String) worker.get());
                    }
                    catch (Exception e1) {
                        message.setText(e1.getMessage());
                    }
                }
            });
    Et j'explicite un peu:

    xslFile, xmlFile, output sont des JTextField qui r�pr�sentent un fichier xsl, xml et un fichier de sortie (pdf).


    PdfGenerator s'occupe de transformer le XSL en PDF avec FOP.

    message est un JTextfield qui affiche ok ou l'erreur rencontr�e.

    Voil�

  16. #16
    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
    Justement tu l'utilises mal

    Tout comme les threads tu ne dois pas appeller la m�thode run() directement, sinon le traitement long s'ex�cutera dans le thread courant !!!

    A la place il faut soit appeller la m�thode execute() qui place la t�che dans une queue d'ex�cution (10 t�ches � la fois max il me semble), soit passer directement le SwingWorker � un ExecutorService qui se chargera de l'ex�cuter selon d'autres crit�res...

    De plus tu peux utiliser les Generics pour modifier le type de retour de get() et doInBackground(). Enfin le code a effecter dans l'EDT � la fin du traitement doit �tre dans la m�thode done() du SwingWorker, ce qui donnerait dans ton cas (en bleu les principales diff�rences) :
    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
            bGenerer.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    new SwingWorker<String,Object>() {
    
                        protected String doInBackground() throws Exception {
                            PdfGenerator generator = new PdfGenerator();
                            String result = "Ok";
                            try {
                                generator.run(xslFile.getText(), xmlFile.getText(),
                                        output.getText());
                            } catch (Exception e) {
                                result = e.getMessage();
                            }
    
                            return result;
                        }
                        
                        @Override
                        protected void done() {
                            try {
                                message.setText(get());
                            } catch (Exception e1) {
                                message.setText(e1.getMessage());
                            }
                        }
                    }.execute();
                }
            });
    a++

  17. #17
    Membre �m�rite
    Profil pro
    Architecte technique
    Inscrit en
    Mars 2002
    Messages
    966
    D�tails du profil
    Informations personnelles :
    �ge : 52
    Localisation : France

    Informations professionnelles :
    Activit� : Architecte technique

    Informations forums :
    Inscription : Mars 2002
    Messages : 966
    Par d�faut
    Merci pour te lumi�res monsieur le boss.

    Ca marche miquel.

    A+

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Comment savoir si une requete c'est bien pass�
    Par choubak dans le forum Requ�tes et SQL.
    R�ponses: 2
    Dernier message: 04/07/2007, 15h26
  2. R�ponses: 6
    Dernier message: 12/09/2006, 11h08
  3. [Threads] Savoir si un thread a provoqu� une erreur
    Par anykeyh dans le forum Windows
    R�ponses: 6
    Dernier message: 26/04/2006, 15h12
  4. [JDBC] Savoir si un INSERT s'est bien effectu�
    Par david71 dans le forum JDBC
    R�ponses: 5
    Dernier message: 16/02/2005, 12h06
  5. Comment savoir si une impression s'est bien d�roul�?
    Par Cyrilh7 dans le forum C++Builder
    R�ponses: 5
    Dernier message: 19/11/2003, 20h49

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