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 :

EDT et Swing


Sujet :

EDT/SwingWorker Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 5
    Par défaut EDT et Swing
    Bonjour a tous.
    En ce qui concerner la gestion de l'EDT avec swing j'en suis resté au fait que que tout appel qui engendre un repaint d'un composant qui est affiché à l'écran doit être effectué dans l'EDT.

    Cependant j'ai lu qu'il était possible d'appeler la méthode repait hors de l'EDT
    et qu'il faut créer ces composant dans l'EDT.
    Du genre ce bout de code est OK (le bouton n'est pas encore affiché a l'écran).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
            try {
                SwingUtilities.invokeAndWait(new Runnable() {
                    public void run() {
                        bt= new JButton();
                        test.setSize(100, 100);
                    }
                });
            } catch (Exception e) {
                e.printStackTrace();
            } 
     
            bt.repaint();
    qu'en est-il réellement, quelle sont les règles nécessaires a une bonne gestion de l'EDT?

    merci d'avance

  2. #2
    Membre Expert
    Avatar de visiwi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1 052
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1 052
    Par défaut
    Salut,

    Lorsque que tu appel des méthodes Swing, cela doit-être fait dans l'EDT. Cependant, il existe des méthodes thread-safe, qui on la particularités de toujours être exécutées dans l'EDT quoi qu'il arrive. C'est le cas du repaint().

    Painting in AWT and Swing

    A noter dans ton code que le repaint() est inutile, puisque le bouton n'est pas encore affiché. Le paint sera de toute façon effectué lorsque le composant deviendra visible.

    La méthode invokeAndWait exécute le code dans l'EDT, mais elle fait attendre le programme pour que ce code soit exécuter. L'utilisation de cette méthode est plus rare (bien qu'utile).
    La plupart du temps c'est la méthode invokeLater qui doit être utilisé. Elle exécute le code dans l'EDT mais le code sera exécuter lorsque l'EDT aura exécuté tous les autres codes précédemment invoqué dans sa pile.

    Threads et performance avec Swing

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 5
    Par défaut
    Merci pour tes réponses.

    Une autre question, n'y a t'il pas des méthodes qui peuvent bloquer l'EDT
    genre a la construction d'un JFileChooser, l'instanciation de celui-ci peut prendre du temps ( s'il ya des disque reseau par exemple) si j'exécute cette méthode dans l'EDT il vas être bloqué non ?


    A noter dans ton code que le repaint() est inutile,
    c'était juste pour illustrer mes dires.

  4. #4
    Membre Expert
    Avatar de visiwi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1 052
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1 052
    Par défaut
    Le JFileChooser est modal, donc cela bloquera ton code qui attendra une "réponse" de l'objet. Mais ce n'est pas un "blocage" a proprement parlé.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 5
    Par défaut
    Je vouais dire pendant l'executuion du new JFileChooser pas son affichage.

    Lorsque que tu appel des méthodes Swing, cela doit-être fait dans l'ED
    Sinon est-ce valable pour les méthodes AWT ?

    Cependant, il existe des méthodes thread-safe, qui on la particularités de toujours être exécutées dans l'EDT quoi qu'il arrive. C'est le cas du repaint().
    Est ce le cas de revalidate() ?

  6. #6
    Membre éclairé Avatar de Balbuzard
    Profil pro
    Inscrit en
    Août 2008
    Messages
    381
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 381
    Par défaut
    1°) : non : regarde ici

    2°) : oui : regarde ici :c'est marqué :
    Validation will occur after all currently pending events have been dispatched
    Cordialement ;-)

Discussions similaires

  1. Swing, EDT, menu non bloquant
    Par visiwi dans le forum EDT/SwingWorker
    Réponses: 7
    Dernier message: 01/06/2008, 22h36
  2. ArrayOutOfBoundsException dans l'EDT de swing
    Par hugo123 dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 27/11/2007, 22h28
  3. swing et edt
    Par Sp4ce dans le forum EDT/SwingWorker
    Réponses: 8
    Dernier message: 16/10/2007, 12h06
  4. Swing et l'EDT
    Par zulkifli dans le forum EDT/SwingWorker
    Réponses: 6
    Dernier message: 11/10/2007, 20h14
  5. Swing, EDT, et rafraichissement
    Par Flophx dans le forum EDT/SwingWorker
    Réponses: 11
    Dernier message: 19/04/2007, 20h09

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