Encore un thread qui ne fonctionne pas

Résolu
papachimique Messages postés 6 Date d'inscription   Statut Membre Dernière intervention   -  
papachimique Messages postés 6 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
Encore une question sur les threads, car j'ai constaté que beaucoup de questions concernent cette question, mais aucune réponse semble fonctionner dans mon cas.
Mon problème se trouve, je pense, sur le joint().

Mon programme consiste à déplacer un panel(transparent) sur un autre panel (en faisant un demi cercle). Malgré mon Thread, seule la position initiale (afficher avant l’appel de la procédure mouveSelection) et la position final apparait mais pas les positions intermédiaires.

Dans ma classe panelOscillo (qui contient une instance maSelect) :
public void mouveSelection()
 {
 for (int i=0;i<=nbPas;i++)
  {
  angle = pasDegrs * (float)i;
  xx = (float) (centreCercleX - rayonX * Math.cos((double)angle));
  yy = (float) (centreCercleY + rayonY * Math.sin((double)angle));
   
   
  Thread thread1 = new Thread(new runMvtMotif((int)xx,(int)yy  ));
  thread1.start();
  try {   thread1.join();  } 
   catch (InterruptedException e) { e.printStackTrace();  }
    
  tempsPause(20);
  }
 }

ma class runMvtMotif
class  runMvtMotif implements Runnable
{
 int xx,yy;
 
 public runMvtMotif(int x,int y) {xx = x;yy=y;}
 
 public void run()
  {
  principal.maFen.monPanAscillo.maSelect.setLocation(xx , yy );
  principal.maFen.monPanAscillo.maSelect.repaint();
  }
}
A voir également:

2 réponses

KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Bonjour,

Le problème vient du fonctionnement de l'EDT (Event Dispatching Thread) qui gère les évènements de l'interface graphique et ne rends pas la main à l'affichage tant que le listener n'est pas terminé (tu peux t'amuser à déplacer toute ta fenêtre, tu verras qu'elle freeze).
Ce qu'il faut c'est avoir un listener extrêmement court, qui démarre un SwingWorker (en gros, un autre thread géré par l'EDT) qui s'exécutera après la fin du listener.
0
papachimique Messages postés 6 Date d'inscription   Statut Membre Dernière intervention  
 
Bonjour KX ... et un grand merci.

tout marche parfaitement. J 'avais fais plein de recherches sur internet mais il me manquait le mot clef SwingWorker.

Du coup je viens aussi de comprendre pourquoi, à chaque fois que je faisais un progressBar, il ne fonctionnait jamais .... pas facile la vie pour les débutants!
0