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 :

InvokeAndWait -> Pas possible depuis EDT ?


Sujet :

EDT/SwingWorker Java

  1. #1
    Membre régulier
    Inscrit en
    Décembre 2005
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 117
    Points : 109
    Points
    109
    Par défaut InvokeAndWait -> Pas possible depuis EDT ?
    Bonjour,

    J'ai un problème que j'ai du mal à comprendre. Quand j'appuis sur un bouton, je dois changer d'interface. Le changement d'interface peut être long j'ai donc décidé d'utiliser un écran de chargement afin de montrer que ça charge quand même.

    Au début, j'éssayai d'afficher l'écran dans un glasspane de ma JFrame et de construire le reste ensuite, mais en fait on ne le vois pas car il s'éfface avec tout le reste...

    Donc j'ai éssayé de déclencher un thread de changement d'interface grace à une des méthode InvokeAndWait ou InvokeLater (dont je ne comprends pas trop les différences)

    Lorsque j'utilise l'une de ces méthodes, il me balance une exception :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Exception in thread "AWT-EventQueue-0" java.lang.Error: Cannot call invokeAndWait from the event dispatcher thread
    D'où ma question: Si je veux lancer mon changement d'interface une fois que tout est affiché (ecran de chargement), comment / où dois-je utiliser invokeAndWait ou InvokeLater ?

    Merci

  2. #2
    Membre averti Avatar de let_me_in
    Inscrit en
    Mai 2005
    Messages
    441
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 441
    Points : 437
    Points
    437
    Par défaut
    utilise invokeLater a la place de invokeAndWait.
    invokeAndWait va attendre sans jusqu'a ce que le travail se fera pour rendre la main a l'utilisateur.
    invokeLater va mettre le travail dans la file d'attente et rendera la main avant de l'effectuer.

    tu le fais comment l'appel?
    montre nous ton code
    qui dit Dieu n'existe pas dis que les programmes tournent sans processeur.

  3. #3
    Membre régulier
    Inscrit en
    Décembre 2005
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 117
    Points : 109
    Points
    109
    Par défaut
    Un bout de code:

    Le bouton lance:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
     public void pressed(EventObject e) {
            if((Bouton)e.getSource()==btnSuivant) {
                if(_GC._essence!=0) { //Vérifier qu'on ai un choix...
                    _fenetre.removeFenetreClavierListener(this);
                    _fenetre.changeInterface(interfaceSuivante);
                }
           }

    la méthode changeInterface contient:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    ChangeurInterface ci = new ChangeurInterface( this, monInterface );
     
    try {
        Toolkit.getDefaultToolkit().getSystemEventQueue().invokeAndWait(ci);
        SwingUtilities.invokeAndWait(ci);
    }catch(Exception e) {
     
    }

  4. #4
    Membre averti Avatar de let_me_in
    Inscrit en
    Mai 2005
    Messages
    441
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 441
    Points : 437
    Points
    437
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Toolkit.getDefaultToolkit().getSystemEventQueue().invokeAndWait(ci);
    c'est probablement cette ligne qui pose probleme,
    essaie en l'enlevant.
    qui dit Dieu n'existe pas dis que les programmes tournent sans processeur.

  5. #5
    Membre régulier
    Inscrit en
    Décembre 2005
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 117
    Points : 109
    Points
    109
    Par défaut
    et comment je fait mon invokelater ???

  6. #6
    Membre averti Avatar de let_me_in
    Inscrit en
    Mai 2005
    Messages
    441
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 441
    Points : 437
    Points
    437
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    javax.swing.SwingUtilities.invokeLater(new Runnable(){
                                                       pulic void run(){
                                                              //appel a une methode
                                                              }
                                                        });
    qui dit Dieu n'existe pas dis que les programmes tournent sans processeur.

  7. #7
    Membre régulier
    Inscrit en
    Décembre 2005
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 117
    Points : 109
    Points
    109
    Par défaut
    merci mais ça me sort toujours la même exception... J'avais éssayé ça en premier lieu...

    Merci quand même...

  8. #8
    Membre averti Avatar de let_me_in
    Inscrit en
    Mai 2005
    Messages
    441
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 441
    Points : 437
    Points
    437
    Par défaut
    je pense que ca vient du fait que tu l'appelle avec une instance d'une classe (ci), et que ta classe n'implemente pas Runnable.
    qui dit Dieu n'existe pas dis que les programmes tournent sans processeur.

  9. #9
    Membre régulier
    Inscrit en
    Décembre 2005
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 117
    Points : 109
    Points
    109
    Par défaut
    Et bien oui en fait... la classe ChangeurInterface extends Thread, et elle a bien une méthode run() qui fonctionne puisque testée... mais pas avec invokeLater ou invokeAndWait...


Discussions similaires

  1. Windows Phone 8 : pas d’upgrade possible depuis Windows Phone 7
    Par Gordon Fowler dans le forum Windows Phone
    Réponses: 32
    Dernier message: 26/06/2012, 18h36
  2. Réponses: 2
    Dernier message: 11/08/2006, 11h11
  3. [MySQL] Clients n'ayant pas commandé depuis n mois
    Par sdelaunay dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 08/07/2006, 13h26
  4. Réponses: 1
    Dernier message: 20/12/2005, 17h51

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