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

AWT/Swing Java Discussion :

[Swing][Thread] affichage fenetre pdt tache longue


Sujet :

AWT/Swing Java

  1. #1
    Membre averti Avatar de rems033
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    513
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2007
    Messages : 513
    Points : 345
    Points
    345
    Par défaut [Swing][Thread] affichage fenetre pdt tache longue
    Suite au post http://www.developpez.net/forums/sho...d.php?t=391262
    Je me suis tourné vers l'utilisation de Thread....résultat : ca fonctionne pas trop mal.
    Cependant, la fenetre que j'affiche pdt la tache longue contient une image gif (qui tourne pour indiquer une tache de fond) mais dont l'affichage est gelé.
    Existe - t - il un moyen de faire apparaitre correctement cette image gif ?
    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
     
    new Thread(new Runnable()
                    {
                        public void run()
                        {
                            final FenetreInstant t = new FenetreInstant("Extraction en cours...") ;
                            SwingUtilities.invokeLater(new Runnable() 
                            {
                                public void run()
                                {
                                    extractDonnees();
                                    t.dispose();
                                    if(erase)
                                    {
                                        effacerDisque();
                                    }
                                    fDisk.dispose();
                                    if(open)
                                    {
                                        fPrinc.ajouterFichier(path);
                                    }
                                }
                            });
                        }
     
                    }).start() ;

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

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    T'as pas encore capté le truc

    Quand tu utilises SwingUtilities.invokeLater tu demandes à ce que ce les opérations qui vont être effectuées dans le Runnable soit réalisées dans l'Event Dispatch Thread (aka le thread de rendu des composants Swing).

    SwingUtilities.invokeLater ne doit être utilisé que pour faire des modifications de composants swing depuis des threads externes. Pas pour faire 36000 calculs
    En version propre:tu dois faire:


    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
    new Thread(new Runnable() {
        public void run() {
     
            //Problème de conception ici, enlève le setVisible de ton constructeur
            final FenetreInstant t = new FenetreInstant("Extraction en cours...") ;
     
            //On modifie l'état  d'un composant Swing => Opération à effectuer dans l'EDT
            SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    t.setVisible(true);
                }
            });
     
            //L'extraction de données n'a rien à faire avec Swing => En dehors de l'EDT
            extractDonnees();
            SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    t.dispose();
                }
            });
            //Rien à voir avec Swing
            if(erase) {
                effacerDisque();
            }
            //C'est du Swing je suppose
            SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    fDisk.dispose();
                }
            });
     
     
            //Opération n'affectant pas de coposant SwinG?
            if(open) {
                fPrinc.ajouterFichier(path);
            }
     
        }
    }).start() ;
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  3. #3
    Membre averti Avatar de rems033
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    513
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2007
    Messages : 513
    Points : 345
    Points
    345
    Par défaut
    Trop trop bien!!! Ca marche nickel !
    Merci beaucoup pour ta precieuse aide...ca va me servir de référence pour le reste de mon projet!
    Tres sympa de ta part de m'avoir laissé ce bout de code et ca me parait beaucoup plus clair maintenant!

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

Discussions similaires

  1. Tache longue, progression et Swing
    Par Invité dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 12/10/2009, 00h32
  2. [SWING] affichage fenetre corrompu
    Par rems033 dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 07/08/2007, 14h36
  3. [Swing]Style de Fenetre Java
    Par Voxdei dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 14/07/2004, 22h48
  4. [MFC] affichage fenetre
    Par mulot49 dans le forum MFC
    Réponses: 5
    Dernier message: 08/06/2004, 19h17
  5. [SWING][THREAD]Méthodes pour afficher une Frame
    Par pompidouwa dans le forum Agents de placement/Fenêtres
    Réponses: 3
    Dernier message: 05/05/2004, 10h35

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