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

2D Java Discussion :

[Debutant] repaint() qui ne se font plus


Sujet :

2D Java

  1. #1
    Membre à l'essai
    Inscrit en
    Novembre 2004
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 31
    Points : 20
    Points
    20
    Par défaut [Debutant] repaint() qui ne se font plus
    J'ai un soucis que je ne parviens en aucun cas à expliquer. Considerons trois classes :
    Maitre (mon programme en gros)
    Interface (gestion de l'interface graphique)
    Test (classe main)

    Dans le constructeur de ma classe Maitre j'instancie un bouton à qui je definis un addActionListener, avec dedans un truc bateau : j'execute une fonction qu'on va appeller jouer().

    Mon projet est une simulation et la fonction jouer() fait enchainer les "tours de jeu" dans un while. A la fin de chaque tour de jeu j'appelle un repaint() sur mon Interface pour pour visualiser les changements.
    Je pense que plusieurs d'entre vous ont deja eut ce type de projet à faire dans leur jeunes années.

    Le soucis c'est que quand je clique sur le bouton, la simulation se met bien en route comme prévu (calculs etcs), mais toute mon interface graphique se fige ?!
    Pourtant j'appelle bien un repaint() à chaque étape de la simulation, mais son rôle, son contenu ne s'execute plus : une balise témoin dans le paintComponent de mon interface n'apparait plus.

    Car ce qui est bizarre c'est que quand je lance cette fonction jouer() via la classe Test (main) :
    Maitre m = new Maitre();
    m.jouer();

    Bah... les repaints se font sans soucis, ma balise en témoigne et de toute manière mon affichage se met à jour... Merci pour vos lumières.



    PS : j'ai un autre soucis marginal, à chaque repaint mon interface graphique devient de plus en plus flou. Il y a une espèce de "décalage" qui se fait, donnant lieu à une espèce de dégradé progressif imcompréhensible ?

  2. #2
    Membre expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Points : 3 083
    Points
    3 083
    Par défaut
    Le problème c'est que tu dois mal gérer tes threads (en fait ne pas les gérer tout court).
    Les événements concernant l'interface graphique doivent se faire sur l'EDT (Event Dispatch Thread), et les traitements dans un autre.

    J'ai pas vraiment le temps pour développer plus ma réponse, mais cherche de ce côté.

  3. #3
    Membre émérite
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Points : 2 410
    Points
    2 410
    Par défaut
    Tout a fait. La solution rapide est de remplacer, dans ton actionPerformed :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    machin.jouer();
     
    // remplacer par :
    new Thread() {
      public void run() {
        machin.jouer();
      }
    }.start();
    Mais le mieux est de te documenter sur les threads.

  4. #4
    Membre à l'essai
    Inscrit en
    Novembre 2004
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 31
    Points : 20
    Points
    20
    Par défaut
    J'avoue ne jamais avoir gerér un Thread de ma vie (enfin autre que le principal). Je me suis limité à Thread.sleep(); ^^.
    En tout cas la solution proposée m'a sorti de la memerde, je saurai m'en souvenir.

  5. #5
    Membre émérite
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Points : 2 410
    Points
    2 410
    Par défaut
    Le principe est décrit dans la FAQ, mais créer un thread n'est pas très compliqué (je ne t'ai pas donné la méthode la plus explicite).

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

Discussions similaires

  1. [DEBUTANt]element qui reste toujours a l'ecran. (photo)
    Par mariogarcia dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 31/03/2006, 16h11
  2. [XHTML] [DEBUTANT] Validation qui ne passe pas
    Par hugo123 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 25/01/2006, 20h15
  3. [SQL][debutant]le jour où xxx à le plus d'activité
    Par goussepi dans le forum Langage SQL
    Réponses: 5
    Dernier message: 30/12/2005, 13h52
  4. [debutant]programme qui ne fait rien.
    Par Battosaiii dans le forum Interfaces Graphiques en Java
    Réponses: 10
    Dernier message: 04/12/2005, 22h19
  5. Réponses: 3
    Dernier message: 22/07/2005, 15h16

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