Bonjour,
Voici la description de ce que je souhaite réaliser.
J’ai une IHM Swing qui doit lancer des appels web et parser le flux HTML reçu pour l’afficher dans un composant JeditorPane.
Cette séquence ‘appel +parsing+affichage du resultat’ est périodique (toutes les 10s par ex.)
Jusque là, rien de bien méchant (enfin presque…)
Ayant lu tout ce que je pouvais trouver sur SwingWorker, java.util.Timer, et javax.swing.Timer, j’en ai tiré les conclusions suivantes :
- 1. javax.swing.Timer ne peut pas répondre à mon besoin car je veux que mon IHM reste réactive et le traitement de la séquence s’effectuerait dans l’EDT ce qui, avec des appels Web, serait fatal. Ai-je raison ?
- 2. à la différence de javax.swing.Timer, java.util.Timer ne s’exécute pas dans l’EDT, donc pas de risque de blocage. Je prévoyais donc d’utiliser un TimerTask dans lequel je code toute ma séquence ‘appel +parsing+affichage’, en terminant par un SwingUtilities.invokeLater pour mettre à jour le Jeditorpane avec le résultat du parsing HTML.
MAIS, et c’est là mon problème principal, la séquence d’appel ci-dessus peut m’amener à changer la périodicité d’appel. Or, sauf erreur, je n’ai pas vu de possibilité pour un Timer de modifier dynamiquement la périodicité d’éxécution du TimerTask. Pouvez-vous me le confirmer ? Si oui, comment puis-je résoudre simplement mon problème (j'ai l'impression de construire une usine à gaz...) ? Avez-vous un squelette de code ?
Partager