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 :

Communication entre EDT et le thread main


Sujet :

EDT/SwingWorker Java

  1. #1
    Membre régulier
    Inscrit en
    Février 2008
    Messages
    686
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 686
    Points : 118
    Points
    118
    Par défaut Communication entre EDT et le thread main
    salut
    je suis entrain de developper une application java 6 en utilisant swing.
    J'ai utilisé la bibliothéque swingx et on particulier JXLoginPane comme interface d'authentification.
    Ce que je n'arrive pas à comprendre est comment se fait lacommunication entre EDT et le thread main: ce que j'ai tenu est qu'on lançant le main de l'application , c'est le thread main qui est lancé.
    Voici mon code d'authentification
    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
     
     
    AuthentificationController loginService = new AuthentificationController();
    DefaultUserNameStore userNames = new DefaultUserNameStore();
    Preferences appPrefs = Preferences
    				.userNodeForPackage(AuthentificationVue.class);
    userNames.setPreferences(appPrefs.node("login"));
    frame = JXLoginPane.showLoginFrame(
    loginService, null, userNames);
    frame.setTitle("Authentification");
    frame.setIconImage(Images.application.getImage());
    frame.getPanel().setMessage("Entrez votre Login et mot de passe");
    			System.out.println("isEventDispatchThread1="+SwingUtilities.isEventDispatchThread());
    			System.out.println("Thread1="+Thread.currentThread().getName());
    frame.addWindowListener(new WindowAdapter() {
     
    	public void windowClosed(java.awt.event.WindowEvent e) {
    					 System.out.println("isEventDispatchThread2="+SwingUtilities.isEventDispatchThread());
    					System.out.println("Thread2="+Thread.currentThread().getName());
    			JXLoginPane.Status status = frame.getStatus();
                           // make sure the login was successful
    			if (status == JXLoginPane.Status.SUCCEEDED)  {						
    				AcceuilJFrame.getInstance();
    			}
                            else {
    				//System.out.println("Login Failed: " + status);
    			}
    				}
    			});
    			frame.setVisible(true);
    J'ai constaté que le THread EDT est lancé dans le listener frame.addWindowListener (sans même que je précis),mais mon probléme vient maintenant:lorsque l'authentification réussit, je fai appele à l''interface principale de mon application(AcceuilJFrame.getInstance()),depuis ce moment j'ai constaté que dans toute mon application c'est le Thread EDT qui est exécuté!
    Comment éviter ce probléme?
    Comment je puisse faire appel , dans des traitements métiers ,au thread main.

  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 : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Dès lors que tu as une interface graphique, il faut que tu considère le main thread comme étant l'EDT.

    De fait pour lancer correctement un GUI il faut s'assurer qu'il est lancé dans l'EDT en effectuant l'appel suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    public class MyFrame extends JFrame {
     //.... Code d'implémentation du GUI ...
     
       public static void main (String[] args) {
           SwingUtilities.invokeLater(new Runnable() {
               public void run() { 
                    MyFrame m = new MyFrame();
                    // ....  config de la frame
                    m.setVisible(true);
               }
           }
       }
    }

Discussions similaires

  1. communication entre un std::thread et le main
    Par robinsondesbois dans le forum Threads & Processus
    Réponses: 5
    Dernier message: 17/04/2014, 16h44
  2. Communication entre thread
    Par JFPS Soft dans le forum Concurrence et multi-thread
    Réponses: 2
    Dernier message: 03/02/2006, 17h38
  3. [c#][threading] communication entre threads
    Par orelero dans le forum C#
    Réponses: 6
    Dernier message: 02/01/2006, 00h42
  4. Communication entre 2 threads
    Par marsupilami34 dans le forum Langage
    Réponses: 4
    Dernier message: 26/08/2005, 15h08
  5. Communication entre deux Threads
    Par rvzip64 dans le forum Langage
    Réponses: 13
    Dernier message: 28/01/2005, 09h14

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