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 -
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) :
ma class runMvtMotif
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:
- Exception in thread "main" java.awt.illegalcomponentstateexception: contentpane cannot be set to null.
- Qwerty to azerty - Guide
- Deco in paris avis ✓ - Forum Consommation & Internet
- Navigation in private - Guide
- Decoinparis ⚠️ arnaque ✓ - Forum Consommation & Internet
- Press esc in 1 seconds to skip startup.nsh any other key to continue ✓ - Forum Windows 10
2 réponses
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.
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.
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!
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!