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 et edt


Sujet :

EDT/SwingWorker Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Sp4ce
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 81
    Par défaut swing et edt
    Bonjour,

    je post encore un message là dessus parce que j'y comprend rien et j'ai donc besoin d'aide personalisé si je veux que mon appli marche, désolé.

    alors vois mon code actuelle

    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
     
    public void actionPerformed(ActionEvent e){
        File file = new File(fileField.getText());
     
        if (file==null || (!file.exists())) {
    	stateLabel.setForeground(Color.RED);
            stateLabel.setText("!!! write a good path !!!!");
        } else {
    	// preferences
    	app.getClientPreferences().setFile(file);
            app.getClientPreferences().setFileFormat(ClientPreferences.XYZ_FORMAT);
            app.getClientPreferences().setMode(ClientPreferences.FILECONNECTIONBUFFERED);
     
            app.getTestControlDraw().setControlEnabled(true);
            app.getTestDraw().initDrawing();
            // display info
            SwingUtilities.invokeLater(new Runnable () {
    	    public void run() {
    	        stateLabel.setForeground(Color.BLACK);
    	        stateLabel.setText("Bufering");
    	    }
            });
            // disconnect a possibly connected trajPanel or testPanel
            app.getTrajPanel().disconnect();
            app.getTestPanel().disconnect();
     
            // sleep to leave the time of the trajHandler to construct its first traj.	
            Thread thread = new Thread(new Runnable() {
    	    public void run(){
    	        try{
    		    while(app.getTrajHandler().getUpdated()==0){}
                        app.getTestDraw().setMaxMinTime(app.getTrajHandler().getMaxTime(),         app.getTrajHandler().getMinTime());
    	            app.getTestControlDraw().initPlaying();
            	    // System.out.println("minTime: "+trajDraw.getMinTime()+" currentTime: "+trajDraw.getCurrentTime()+" maxTime: "+trajDraw.getMaxTime());
    		    app.getTestDraw().setLocalOnly(false);					                    app.getTestControlDraw().play();
    		    app.setTestPanel();
    	        }catch(Exception e){
     
    	        }
                }
            });
            thread.start();
            this.setVisible(false);
        }
    }
    en gros ce que je veut faire c'est :

    - bufferiser des informations et continuer le traitement une fois que c'est bon (une fois que app.getTrajHandler.getUpdated()!=0)
    - afficher sur un composant swing, stateLabel qui est un JLabel, une info concernant la bufferisation.

    Ce que ça fait maintenant :
    - une fois que je clique sur le bouton, le bouton reste enfoncé et je vois pas le changement du JLabel. Une fois que c'est bufferisé, l'appli reprend son cours et tout va bien.

    J'ai essayé de suivre les conseil avec les invokeLater et mettre des thread, mais je crois que ça me dépasse un peu pour le moment c'est choses-là alors si quelqu'un pouvait me dire ce que je dois faire, ça serait super sympa !

    merci pour l'attention.

  2. #2
    Membre éprouvé
    Inscrit en
    Août 2005
    Messages
    142
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 142
    Par défaut
    Déjà
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    // display info
            SwingUtilities.invokeLater(new Runnable () {
    	    public void run() {
    	        stateLabel.setForeground(Color.BLACK);
    	        stateLabel.setText("Bufering");
    	    }
            });
    est inutile car se déroulant déjà dans l'EDT.

    C'est dans ton Thread que tu doit utiliser SwingUtilities.invokeLater car le code exécuté ne se déroule pas dans l'EDT.

  3. #3
    Membre confirmé Avatar de Sp4ce
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 81
    Par défaut
    bah voila ce que j'ai fait et ça change rien :

    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
     
    public void actionPerformed(ActionEvent e){
        File file = new File(fileField.getText());
     
        if (file==null || (!file.exists())) {
    	stateLabel.setForeground(Color.RED);
            stateLabel.setText("!!! write a good path !!!!");
        } else {
    	// preferences
    	app.getClientPreferences().setFile(file);
            app.getClientPreferences().setFileFormat(ClientPreferences.XYZ_FORMAT);
            app.getClientPreferences().setMode(ClientPreferences.FILECONNECTIONBUFFERED);
     
            app.getTestControlDraw().setControlEnabled(true);
            app.getTestDraw().initDrawing();
            // display info
            stateLabel.setForeground(Color.BLACK);
            stateLabel.setText("Bufering");
     
            // disconnect a possibly connected trajPanel or testPanel
            app.getTrajPanel().disconnect();
            app.getTestPanel().disconnect();
     
            // sleep to leave the time of the trajHandler to construct its first traj.	
            Thread thread = new Thread(new Runnable() {
    	    public void run(){
                    SwingUtilities.invokeLater(new Runnable () {
                        public void run() {
    	                try{
    		            while(app.getTrajHandler().getUpdated()==0){}
                                app.getTestDraw().setMaxMinTime(app.getTrajHandler().getMaxTime(),         app.getTrajHandler().getMinTime());
    	                    app.getTestControlDraw().initPlaying();
            	            // System.out.println("minTime: "+trajDraw.getMinTime()+" currentTime: "+trajDraw.getCurrentTime()+" maxTime: "+trajDraw.getMaxTime());
    		            app.getTestDraw().setLocalOnly(false);					                    app.getTestControlDraw().play();
    		            app.setTestPanel();
    	                }catch(Exception e){}
                        }
                    });
                }
            });
            thread.start();
            this.setVisible(false);
        }
    }

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

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    C'est pas encore çà de cette façon, tu executes l'intégralité du code du thread dans l'EDT.

    N'utilises invokeLater dans le Thread que pour interagir avec tes composants swing (changement de valeurs, de modèle, d'aspect...). En ce qui concerne le action non Swing elle ne doivent pas être réalisées dans le invokeLater mais juste dans le run du thread

  5. #5
    Membre confirmé Avatar de Sp4ce
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 81
    Par défaut
    comprends rien...

    j'ai fais ça, ça change rien

  6. #6
    Membre éprouvé
    Inscrit en
    Août 2005
    Messages
    142
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 142
    Par défaut
    C'est pourtant assez simple.
    Je te fais une petit schéma:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public void actionPerformed(ActionEvent e){
         //La t'es dans l'EDT, tu peux toucher à tes composants
         Thread thread = new Thread(new Runnable() {
              public void run(){
                   //La t'es plus dans l'EDT, tu ne dois pas toucher à tes composants
                   //par contre tu peux exécuter une tache longue
                   SwingUtilities.invokeLater(new Runnable () {
                        public void run() {
                             //La tu peux retoucher à tes composants

Discussions similaires

  1. Swing thread EDT et JFrame
    Par aspire dans le forum Agents de placement/Fenêtres
    Réponses: 13
    Dernier message: 08/08/2013, 18h41
  2. Swing, EDT, menu non bloquant
    Par visiwi dans le forum EDT/SwingWorker
    Réponses: 7
    Dernier message: 01/06/2008, 22h36
  3. ArrayOutOfBoundsException dans l'EDT de swing
    Par hugo123 dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 27/11/2007, 22h28
  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