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 :

Problème entre repaint and wait


Sujet :

EDT/SwingWorker Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Septembre 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Septembre 2006
    Messages : 36
    Par défaut Problème entre repaint and wait
    Bonjour;

    Je m'excuse d'avance si ce problème à déjà été expliquer dans un tutoriel ou une autre conversation que j'ai pas trouver.

    je suis entrain d'écrire un application qui a un affichage graphique.

    a un moment particulier j'appel:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
                System.err.println("*************************");
                System.err.println("merge");
                merge();
                System.err.println("end merge " + currentPiece);
                System.err.println("new piece");
                newPiece();
                System.err.println("end new piece");
                System.err.println("*************************");
    dans merge il y a un appel a repaint

    dans newPiece je fais appel a une fonction qui fait un wait sur un thread

    voici le résultat à la consol:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    *************************
    merge
    repaint
    end merge
    new piece
    end new piece
    *************************
    comme on le voit l'appel des fonctions ce fait dans le bonne ordre.

    pourtant en pratique le repaint s'effectue après que le wait dans newPiece().

    j'ai lu dans la java doc
    this method causes a call to this component's paint method as soon as possible.
    Ce qui pourrait expliquer le pourquoi, cependant comment pourrais je faire pour que le repaint s'effectue a coup sur au moment de l'appel?

    Merci d'avance

    jason rogers

  2. #2
    Membre éclairé Avatar de donnadieujulien
    Développeur informatique
    Inscrit en
    Avril 2008
    Messages
    433
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2008
    Messages : 433
    Par défaut salut
    Si du développes en swing, je pense qu'il faut chercher du coté de swingworker, pour effectuer tes opérations background sans bloquer l'EDT.
    De cette façon ton repaint devrait fonctionner comme tu le souhaites.

  3. #3
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 909
    Billets dans le blog
    54
    Par défaut
    repaint() ne repeint rien instantanement !
    repaint() indique juste que ca serait bien si on reaffichait dans un futur pas trop eloigne.

    Il existe des manieres de repeindre instantanement (paintImmediatly()), mais il est peut recommande de les utiliser. Si ton traitement est trop long, mieux vaut le deporter dans un SwingWorker qui se chargera de l'effectuer dans une Thread separee sans pour autant bloquer l'EDT (la thread chargee des evenements et des rendus AWT/Swing).
    Dans la methode process(), il te faudra appeler repaint de temps a autre pour assurer que ton affichage se mette a jour, a toi de faire que process() soit regulierement appellee en appelant publish() depuis ta tache.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

Discussions similaires

  1. Problème entre Delphi7 et Crystal Report 9
    Par claude dans le forum Bases de données
    Réponses: 5
    Dernier message: 25/11/2004, 16h42
  2. [Graphisme][Débutant(e)] Problème sur repaint()
    Par Katyucha dans le forum AWT/Swing
    Réponses: 6
    Dernier message: 08/10/2004, 17h12
  3. Problème entre IB 6.0 et Access 2000
    Par Polux63 dans le forum InterBase
    Réponses: 3
    Dernier message: 19/04/2004, 10h34
  4. Problème entre Dev-c++ et Borland c++ compiler 5.5
    Par Argonz dans le forum Dev-C++
    Réponses: 6
    Dernier message: 21/10/2003, 16h21
  5. [ODBC] Problème entre access et ODBC
    Par StephCal dans le forum Access
    Réponses: 4
    Dernier message: 09/07/2003, 16h47

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