Bonjour à tous,
Je vais essayer d'exposer clairement mon petit problème :
J'essaye de réaliser un programme en utilisant une architecture MVC. Lorsque l'utilisateur clique sur un JMenuItem, le contrôleur, qui est à l'affut, demande au modèle d'exécuter une action "complexe" (typiquement, il s'agit d'une distribution de cartes). Il demande ensuite à la vue d'afficher le résultat de cette opération.
Mais voilà, j'aimerais qu'au cours de cette action, l'affichage soit rafraichi régulièrement, et non pas seulement lorsque celle-ci s'est terminée. Qu'à cela ne tienne, je me suis dit que le contrôleur pouvait lancer tout d'abord un thread dont la méthode run() comporterait une boucle infinie demandant à la vue de s'actualiser, ensuite de lancer l'action du modèle, puis une fois celle-ci exécutée d'interrompre le thread d'actualisation de la vue.
Evidemment, ça ne marche pas.
Lorsque je clique sur mon JMenuItem, le menu déroulant en question reste affiché pendant que mon thread d'actualisation et mon thread principal se déroulent en alternance comme prévu (je peux suivre l'exécution dans la console), mais le rafraichissement graphique ne s'effectue finalement qu'à la fin, lorsque le menu déroulant disparait.
Donc mes questions sont :
1) est-ce qu'il s'agit d'un problème d'occupation du contexte graphique par ce menu déroulant, et que de fait, le rafraichissement ne peut s'effectuer que lorsque celui-ci disparait ?
2) ou bien est-ce que c'est ma méthode de rafraichissement qui est en cause ? Je demande bêtement d'effectuer un revalidate() des panneaux concernés. Est-ce qu'il faut faire autrement ?
Merci d'avance pour vos réponses, et j'espère que j'ai été suffisamment clair![]()
Partager