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 :

mise à jour dessin


Sujet :

EDT/SwingWorker Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 95
    Par défaut mise à jour dessin
    Bonjour,
    Voici mon problème :
    j'ai créé un programme qui affiche un dessin en fonction du dessin précédent. ("Le jeu de la vie" pour tout dire). J'ai une fonction nommée "evoluer()" qui trace mon nouveau dessin(évolution d'une étape). Pour que le dessin évolue et se dessinne au fil du temps j'ai un fonction qui lance :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     int i  = 0;
    while(i++ <= 10) {
    evoluer();
    repaint(); }
    Donc le dessin devrait se mettre à jour et s'afficher à chaque tour de boucle. Or ce n'est pas le cas. Le dessin évolue effectivement 10 fois mais je ne vois que le résultat final, après que la boucle se soit terminée, comme si j'avais mis repaint() après la boucle.
    Donc, pourquoi ? comment y remédier ?
    Merci pour votre attention portée à ma requête.

  2. #2
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Par défaut
    A mon avis tu as un problème de synchronisation de tes actions graphiques.

    C'est courant. Pense à laisser le temps à ton programme de respirer et d'afficher les résultats intermédiraires, en le forçant à faire des pauses par exemple, (ou en séparant tes actions dans différents threads correctement synchronisés).
    Avant de poster, pensez à regarder la FAQ, les tutoriaux, la Javadoc (de la JRE que vous utilisez) et à faire une recherche
    Je ne réponds pas aux questions techniques par MP: les forums sont faits pour ça
    Mes articles et tutoriaux & Mon blog informatique

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Février 2007
    Messages
    572
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Février 2007
    Messages : 572
    Par défaut
    La methode repaint poste une demande de redessin qui sera traitée dans un autre thread (l'EventDispatchThread ou EDT).
    Le thread qui execute ta boucle garde la main pendant la boucle, les 10 demandes de redessin sont postées, et traitées en une seule fois par l'EDT.
    Si ton traitement par itération de boucle était plus long, tu pourrais avoir des étapes intermédiaires, en fonction de l'ordonnancement des threads.

    Si tu veux voir toutes les etapes, il faut soit :
    1. que tu appelles la methode paint(), qui est synchrone.
    2. que tu executes le code dans le thread EDT (cf java.awt.EventQueue.invokeLater)
    3. que tu te synchronises sur la fin du dessin.

    Je te conseille la methode 1, qui est la plus facile à implementer, et sans doute la plus fiable.
    2. est deconseillé a partir du moment ou les traitements sont long.
    3. est compliqué à mettre au point.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Dessiner en Wpf et mise à jour de l'affichage
    Par Orc_Fayeh dans le forum Windows Presentation Foundation
    Réponses: 7
    Dernier message: 11/04/2008, 11h51
  2. [mise à jour]Comment procéder sans tout péter...
    Par FFF dans le forum Installation
    Réponses: 3
    Dernier message: 10/09/2003, 08h11
  3. Mise à jour de la version de MySQL
    Par jobstar dans le forum Administration
    Réponses: 8
    Dernier message: 18/08/2003, 10h45
  4. mise à jour de champs time (interbase)
    Par pram dans le forum XMLRAD
    Réponses: 6
    Dernier message: 04/03/2003, 10h25
  5. Réponses: 2
    Dernier message: 12/02/2003, 15h26

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