IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

EDT/SwingWorker Java Discussion :

java.util.timer et réévaluation dynamique de la périodicité dans un contexte Swing


Sujet :

EDT/SwingWorker Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Avril 2010
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 45
    Par défaut java.util.timer et réévaluation dynamique de la périodicité dans un contexte Swing
    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 ?

  2. #2
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    La méthode préconisée est plutôt de coupler Timer Swing et SwingWorker.

    Un timer Swing qui se réveille toutes les X secondes qui déclenche l'exécution d'un SwingWorker, qui lui fait la récupération des infos dans son doInBackground() et une fois la récupération effectuée met à jour l'interface dans sa méthode done().

    Cf cours/tutos sur le SwingWorker.
    Voilou

  3. #3
    Membre averti
    Inscrit en
    Avril 2010
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 45
    Par défaut
    Oui, mais comment mettre à jour la périodicité du timer (mon traitement peut amener à redéfinir la fréquence du timer , par ex. passer d'un traitement tous les 10s à un traitement tous les 5s) ??

  4. #4
    Membre Expert Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282

  5. #5
    Membre averti
    Inscrit en
    Avril 2010
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 45
    Par défaut
    Citation Envoyé par herve91 Voir le message
    Sans avoir besoin d'arrêter le timer et de le redémarrer ? Parce qu'avec java.util.Timer, ce que tu proposes n'est pas possible.

  6. #6
    Membre Expert Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Par défaut
    Oui, il s'agit bien de javax.swing.Timer

Discussions similaires

  1. java.util.Timer dans JavaFx2.0
    Par Limack dans le forum JavaFX
    Réponses: 4
    Dernier message: 27/01/2012, 02h23
  2. java.util.Timer ou Quartz ?
    Par dingoth dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 25/01/2010, 13h27
  3. java.util.Timer et EJB
    Par hb2ee dans le forum Entrée/Sortie
    Réponses: 0
    Dernier message: 14/04/2009, 11h21
  4. [java.util.Timer]Comment arrêter l'exécution d'un Thread
    Par Invité dans le forum Concurrence et multi-thread
    Réponses: 1
    Dernier message: 07/06/2006, 07h54
  5. Réponses: 4
    Dernier message: 06/02/2004, 16h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo