Bonjour,
voici la situation:
- mon application se déroule dans le fil principal AWT-EventQueue
- lors d'un évènement (ActionEvent) par exemple ou lors de conditions particulières, ce fil d'exécution demande le lancement d'un traitement long, qui peut même se bloquer ( Téléchargement FTP par exemple, avec risque de perdre la communication ).
- Évidemment ce processus sera exécuter dans une autre Thread.
Attendu:
- Le traitement longue durée doit montrer sa progression via l'interface graphique, par un barregraphe ou autre moyen d'afficher un pourcentage.
- MAIS... le fil principal de l'application, doit attendre le résultat du traitement longue durée, pour décider de la suite des opérations
- ET... le fil principal doit être capable de continuer tout seul, au bout d'une temporisation, au cas où le traitement longue durée ne donne plus signe de vie (par exemple il ne publie pas son état d'avancement, ce qui laisse supposer qu'il est bloqué).
=> donc le fil principal doit entrer dans une sorte de boucle d'attente:
+ attendre le retour normal de traitement
+ ou attendre la fin de la temporisation de sécurité.
Problème:
Faire une boucle d'attente à l'aide d'un Do-While, ou une attente du genre MonThreadTraitement.join(), cela provoque un blocage au niveau du fil principal AWT-EventQueue, et donc une absence de rafraîchissement graphique.
J'ai beau tourner le problème dans tous les sens:
- si je ne veux pas bloquer le rafraîchissement graphique, je ne peux alors pas faire la boucle d'attente, et donc je ne saurai jamais le résultat du traitement...
- si je fais une boucle d'attente du résultat dans le fil principal, je n'aurai pas de rafraîchissement graphique.
Je deviens fou
-
Partager