problème d'affichage dans un thread différent du main

problème d'affichage dans un thread différent du main - Java - Programmation

Marsh Posté le 24-02-2008 à 18:39:23    

salut,
 
je suis pas vraiment sur que mon titre soit le mieux mais je vais vous exposer mon problème :
 
je suis étudiant et j'ai un tp en java qui doit m'apprendre à me servir des thread :sol: . en faite c'est juste une histoire de déplacement de figure dans un affichage : si on effectue plein de petit déplacement dans le même thread que le main et qu'on lui demande l'affichage il n'affichera que le résultat :cry: ; mais si on sépare les petits déplacements dans un autre thread, on devrait voire tous les petits déplacements :love: .
j'arrive à faire les dépacements dans le thread du main (il n'affiche que le résultat :wahoo: ), j'arrive à faire les déplacements dans l'autre thread (j'utilise netbean et je vois que je suis bien dans un nouveau thread lors des déplacements grâce au debugueur) mais au lieu de m'afficher les déplacements il n'affiche que le résultat :heink:  :cry: .  
 
voilà ma classe qui utilise le thread:
 

Code :
  1. package graphic;
  2. public class Behavior extends Thread{
  3.    
  4.     private Shape shape;  //shape est la figure que je dois afficher
  5.    
  6.     public Behavior(Shape shape){
  7.         this.shape=shape;
  8.     }
  9.     public void move(int dx, int dy){
  10.         this.dx=dx;
  11.         this.dy=dy;
  12.         start();   //démarrage du nouveau thread
  13.     }
  14.    
  15.     public void run(){
  16.         int x=shape.getX();
  17.         java.util.List<Surface> list =shape.getListSurface();  //il peut y avoir plusieurs panel d'affichage dans la même fenêtre->on doit modifier toutes les surfaces
  18.         while(shape.getX()!=x+dx){
  19.             shape.setX(shape.getX()+1);   //déplacement de l'objet jusqu'à x+dx par pas de 1 pixel
  20.             for(Surface s: list)     //on affiche le déplacement qu'on vient de faire
  21.                 s.repaint();
  22.         }
  23.     }
  24.        
  25.     private int dx;
  26.     private int dy;
  27. }


 
si j'ai bien compris le principe d'un thread :??: , normalement c'est une partie du programme qui s'exécute en parallèle au programme main :heink: . donc normalement je devrait voire les déplacements lorsque j'utilise le mode pas à pas du debugueur mais il faut que j'attende la fin du thread  :fou: (donc la fin de tous les déplacement  :cry: ). ne faudrait il pas mieux mettre la boucle while dans la fonction move et ce serait dans le while qu'on fait l'affichage :??: ?? l'affichage ce ferait pendant qu'on calcul la position suivante, non :??: ??

Reply

Marsh Posté le 24-02-2008 à 18:39:23   

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed