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] Mise a jour de l'interface dans les événements


Sujet :

EDT/SwingWorker Java

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 14
    Points : 8
    Points
    8
    Par défaut [SWING] Mise a jour de l'interface dans les événements
    Bonjour,
    Voila, je me demande si quelqu'un a déjà rencontré ce problème. Je développe actuellement une application en SWING et j'ai des problèmes de mise à jour de l'interface. A la suite d'une action de l'utilisateur, je veux :
    1 effectuer une mise a jour de l'interface (du genre "traitement en cours")
    2 lancer une série de traitements
    3 effectuer une nouvelle mise a jour de l'interface (afficher le résultat des traitemens).
    Mon problème est le suivant: la première mise à jour ne s'effectue qu'à la fin du traitement de l'événement (et donc ne se voit pas). Quelqu'un a-t-il une idée?
    "L'experience est le nom que l'homme donne à ses erreurs" O.Wilde

  2. #2
    Gfx
    Gfx est déconnecté
    Expert éminent
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Points : 8 178
    Points
    8 178
    Par défaut
    Oui. Les evenements sont executes dans un thread appele Event Dispatch Thread (ou EDT). Si tu fais des operations dedans tu bloques le rafraichissement de l'interface. Il faut donc lancer un nouveau thread depuis ton ecouteur d'evenement pour lancer ton traitement. En revanche les mises a jour de l'interface et les acces aux composants doivent toujours etre fait dans l'EDT. Regarde SwingUtilities.invokeLater(), SwingUtilities.invokeAndWait() et renseigne-toi sur la classe SwingWorker (non incluse dans le JDK).
    Romain Guy
    Android - Mon livre - Mon blog

  3. #3
    Membre actif
    Inscrit en
    Juin 2005
    Messages
    303
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 303
    Points : 201
    Points
    201
    Par défaut
    il faut faire des threads pour chaque tache si tu veux assurer le bon deroulement chronologique de test actions. C'est une histoire du style zone critique, il faut considerer que ton interface est comme une zone critique qui a une liste qui contient 3 threads et que chacun d'eux attend son tour pour affectuer le traitement qu'il doit faire

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 14
    Points : 8
    Points
    8
    Par défaut
    Merci à vous, j'ai résolu mon problème grace à SwingUtilities.invokeLater(), bon a savoir...
    "L'experience est le nom que l'homme donne à ses erreurs" O.Wilde

Discussions similaires

  1. Mise a jour d'un champ dans une base access
    Par FabriceAmex dans le forum IHM
    Réponses: 9
    Dernier message: 10/06/2010, 09h48
  2. Mise a jour de controle utilisateur dans une forme
    Par pascalwick dans le forum Windows Forms
    Réponses: 2
    Dernier message: 02/12/2008, 15h53
  3. [MySQL] Problème de mise a jour d'une donnée dans la base
    Par Yagami_Raito dans le forum PHP & Base de données
    Réponses: 15
    Dernier message: 24/05/2007, 16h06
  4. [MySql] Mise à jour d'une donnée dans une base mysql
    Par Bourak dans le forum Bases de données
    Réponses: 2
    Dernier message: 16/06/2006, 16h46

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