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 :

Swing Event Dispatching Thread


Sujet :

EDT/SwingWorker Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 59
    Par défaut Swing Event Dispatching Thread
    hello

    Je développe en ce moment une application java desktop : Swing + Spring.

    J'ai lu quelques articles et tutoriels et il semble que toute création de composant swing, enfin tout ce qui est lié a swing doit être réalisé au sein d'un thread bien précis : l'Event Dispatching Thread. Pour faire cela, il faut créer un objet type Runnable qui dans sa méthode run() contient notre code swing (création d'une JFrame, ...).
    Ensuite donner cet objet Runnable en paramètre à la méthode invokeLater de la classe SwingUtilities. Cela place donc notre requete pour une nouvelle JFrame dans l'EventQueue.
    Tout ceci permet d'éviter des problèmes de concurrence entre Thread étant donné que les composant de Swing ne sont pas thread safe.

    Est-ce que j'ai bien compris ?

    Si oui, le projet Spring RCP, qui vient de connaitre une nouvelle release, instantie des JFrame (par exemple le SplashScreen) directement dans le container Spring et ne respecte donc pas la règle de l'EDT ?

    Quelqu'un peut-il m'éclairer ?

  2. #2
    Membre Expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Par défaut
    Ce qui doit être fait dans l'EDT c'est ce qui est dessin des fenêtres, affichage, modifications.
    Tu peux très bien instancier une JFrame dans un autre thread, par contre le setVisible(true) devra être appelé dans l'EDT.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 59
    Par défaut
    Eh bien je n'en suis pas certain !
    Selon le livre "Filthy Rich Clients" de Chet Haase et Romain Guy, même la création d'un composant Swing doit se faire au sein de l'EDT !
    Because the JFrame is a Swing component, and because it instantiates another Swing component, it should be created on the EDT, not on the main thread.
    du livre "Filthy Rich Clients" de Chet Haase et Romain Guy

  4. #4
    Membre Expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Par défaut
    Citation Envoyé par YeFFreY Voir le message
    Eh bien je n'en suis pas certain !
    Selon le livre "Filthy Rich Clients" de Chet Haase et Romain Guy, même la création d'un composant Swing doit se faire au sein de l'EDT !

    du livre "Filthy Rich Clients" de Chet Haase et Romain Guy
    Bizarre, je ne comprends pas pourquoi ils devraient être instanciés dans l'EDT, ce n'est qu'une création d'objet, il n'y a aucun événement particulier qui arrive dans le cadre d'un comportement standard tant que la fenêtre n'est pas affichée à l'écran.

    Il y a peut-être quelque chose que je n'ai pas compris.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 59
    Par défaut
    ou alors c'est moi qui comprend pas

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 179
    Par défaut
    Même si, comme natha, je ne vois pas ce que ça change tant que la frame n'est pas visible, je me suis rangé du coté des recommandations de Sun et j'ai modifié toutes mes interfaces pour qu'elles soient écrites comme il le préconise.
    Même si ça ne fait pas de bien, ça ne peut pas faire de mal

    http://java.sun.com/docs/books/tutor...y/initial.html

    Fred

Discussions similaires

  1. Swing et les thread, pour changer..
    Par Golgotha dans le forum EDT/SwingWorker
    Réponses: 5
    Dernier message: 06/10/2008, 13h57
  2. Réponses: 2
    Dernier message: 30/04/2008, 14h40
  3. Swing et les threads
    Par mhamedbj dans le forum EDT/SwingWorker
    Réponses: 3
    Dernier message: 30/01/2008, 12h11
  4. [SWING] JPanel multi-threading
    Par raj dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 12/02/2007, 07h52
  5. [swing] Probleme de thread avec Timer
    Par issou dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 13/05/2006, 22h52

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