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

EDT/SwingWorker Java Discussion :

Implémenter java.lang.Runnable ? Exemple plz


Sujet :

EDT/SwingWorker Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Février 2007
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 162
    Par défaut Implémenter java.lang.Runnable ? Exemple plz
    Bonjour a tous, je débute en java et j'ais une application qui quand elle se lance execute plusiseurs longues taches avant d'être au repos.

    Le problème c'est que ma jframe ne s'affiche q'une fois que mes longues fontions sont terminées alors que mes longues taches mettent à jours des labels et que j'aimerais voir la mise à jour des labels.

    J'ai donc été voir dans la fac pour voir ce qu'il y avait sur les threads.
    J'ai vu qu'il y avait la possiblité de mettre un thread dans une même classe sans avoir à en faire 2 en implémentant java.lang.Runnable.
    Mais le problème c'est que la fac ne fait que citer cette option et ne la développe pas...

    J'aimerais donc savoir comment faire !

    PS : Voici la forme de ma classe :


    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
     
     
    public class majframe extends javax.swing.JFrame {
     
        /** Creates new form frame_recherche_hd */
        public majframe(frame_main frame) {
            gui_accueil = frame;  
     
    		initComponents();
    		//On initialize la langue
            initLanguage();
    		//On initialize les options
            initOptions();
            //On rend la frame visible
            this.setVisible(true);
     
     
    		/***********************
                    Comment lancer les 2 fonctions suivantes dans un thread ?
                    ********************/
            MaGrosseFonctionLongue1();
            MaGrosseFonctionLongue2();
    		/***********************
                    Comment lancer les 2 fonctions précédentes dans un thread ?
                    ********************/
     
     
        }
     
        private void MaGrosseFonctionLongue1(){
            ....
        }
     
        private void initOptions(){
            ....
        }
     
     
     
     
        private void MaGrosseFonctionLongue2(){
            ....
        }                                       
     
     
     
        private void initLanguage(){
            ....
        }
     
     
    	/** This method is called from within the constructor to
         * initialize the form.
         * WARNING: Do NOT modify this code. The content of this method is
         * always regenerated by the Form Editor.
         */
        // <editor-fold defaultstate="collapsed" desc=" Generated Code ">                          
        private void initComponents() {
            .... //GENERE PAR NETBEANS
        }// </editor-fold>                        
     
     
     
        private frame_main gui_accueil;
        // Variables declaration - do not modify                     
        private javax.swing.JButton bt_cancel;
        private javax.swing.JButton bt_ok;
    	.....
     
        // End of variables declaration                   
     
    }

    Je vous remercis d'avance pour votre aide

    Le but final étant que ma Jframe se charge sans difficulté dès le début, que mes fonctions s'éxécute dans un thread sachant que dans ses fonctions des labels sont mis à jour et donc que la mise à jour des label soit visible en temps réel...

  2. #2
    Membre Expert
    Profil pro
    Fabrication GED
    Inscrit en
    Octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Par défaut
    dans ta classe principale :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    TraitementLong tl = new TraitementLong();
    tl.start();
    et le squelette de classe de traitement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public class TraitementLong implements Runnable{
       public void run(){
          // Les traitements qui sont longs.
       }
    }

  3. #3
    Membre confirmé
    Inscrit en
    Février 2007
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 162
    Par défaut
    Comme il est marqué dans mon premier post, j'aimerais que tout soit dans UNE SEULE classe.

    Or ce que tu me propose c'est de scindé ma classe principale et mon thread ce que je ne veux pas.

    Merci d'avance.

  4. #4
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    		/***********************
                    Comment lancer les 2 fonctions suivantes dans un thread ?
                    ********************/
            MaGrosseFonctionLongue1();
            MaGrosseFonctionLongue2();
    		/***********************
                    Comment lancer les 2 fonctions précédentes dans un thread ?
                    ********************/
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    new Thread(new Runnable() {
        @Override
        public void run() {
            MaGrosseFonctionLongue1();
            MaGrosseFonctionLongue2();
            //ces fonctions ne doivent pas modifier l'interface graphique ! (sinon il faut faire les actions dans l'EDT)
        }
    }).start();
    Sinon au niveau de la conception, c'est mieux d'avoir plusieurs classes, là tu mélanges les traitements, le modèle, la vue...

  5. #5
    Membre confirmé
    Inscrit en
    Février 2007
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 162
    Par défaut
    Citation Envoyé par ®om
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    new Thread(new Runnable() {
        @Override
        public void run() {
            MaGrosseFonctionLongue1();
            MaGrosseFonctionLongue2();
            //ces fonctions ne doivent pas modifier l'interface graphique ! (sinon il faut faire les actions dans l'EDT)
        }
    }).start();

    Qu'est ce que tu entends par "//ces fonctions ne doivent pas modifier l'interface graphique ! (sinon il faut faire les actions dans l'EDT)"
    Car dans mes fonctions j'ai le text de mes labels qui change...et si il faut le faire : comment ?


    "@Override" Est souligné comme une erreure sous netbeans, je l'ais donc enlevé ... c'est grave docteur ?

    Merci pour ton aide !

  6. #6
    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 lex13
    Qu'est ce que tu entends par "//ces fonctions ne doivent pas modifier l'interface graphique ! (sinon il faut faire les actions dans l'EDT)"
    Car dans mes fonctions j'ai le text de mes labels qui change...
    À la fin de tes fonctions ou pendant tes fonctions?

    Tu peux englober tes setText(...) avec SwingUtilities.invokeLater( new Runnable() { });
    Ou alors utiliser SwingWorker, c'est plus propre :
    http://rom.developpez.com/java-swingworker

    Sinon pour des setText, ça n'est pas très grave, d'après la javadoc, c'est thread safe, moi je ne suis pas totalement d'accord, c'est ok pour l'exclusion mutuelle, mais ça n'est pas ok pour la mise en cohérence des caches...

    Citation Envoyé par lex13
    "@Override" Est souligné comme une erreure sous netbeans, je l'ais donc enlevé ... c'est grave docteur ?

    Merci pour ton aide !
    Non c'est pas grave, c'est parce que tu es sous java 5 et non java 6...

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

Discussions similaires

  1. java.lang.NoClassDefFoundError sur un exemple tout simple
    Par Invité dans le forum Services Web
    Réponses: 2
    Dernier message: 23/02/2009, 10h36
  2. Réponses: 5
    Dernier message: 22/08/2007, 22h00
  3. Comment faire pour Implémenter java.lang.Runnable
    Par je®ome dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 10/05/2006, 13h17
  4. [IMAGE JAI] java.lang.Error
    Par babyboy dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 18/05/2004, 14h29
  5. Réponses: 4
    Dernier message: 22/01/2004, 08h27

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