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

Composants Java Discussion :

[JTable] rafraichissement des données


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2009
    Messages : 7
    Par défaut [JTable] rafraichissement des données
    Bonjour,
    tout d'abord bravo et merci à tous les contributeurs de ce forum, vous m'avez très souvent aidé à avancer. J'ai encore besoin de vous pour m'aider à comprendre un problème avec ma jtable.

    Donc, j'ai fait une applet qui contient une jtable afin d'afficher des données en temps réel provenant d'un flux boursier. Ces mises à jours me sont envoyés en push et j'en ai constamment, plusieurs changements par seconde. Chaque changement reçu remet à jour le contenu d'une cellule de ma table grâce aux méthodes adéquates (fireTableCellUpdates). La table ne contient pas énormément de données à la fois, du style une vingtaine de lignes et une quinzaine de colonnes par lignes.

    Mes cellules se mettent très bien à jour, aucun problème de ce côté là, mais j'ai l'impression que ma jtable n'est pas assez rapide par rapport à la vitesse des changements reçus par mon flux. J'ai des genres de freezes pendant 2 ou 3 secondes où plus rien de bouge et d'un coup, j'ai plein de cellules qui changent. Les cellules se rafraichissent en temps réel, ça marche bien, puis au bout de 10 ou 20 secondes j'ai ce freeze, plein de cellules qui changent d'un coup, puis de nouveau mon rafraichissement temps réel.

    Avant de chercher si ce soucis peut venir de mon code, et notamment de traitements effectués à chaque changement reçu, j'aimerais savoir si le composant JTable est capable, ou non, de suivre un tel rythme de mise à jour.

    Bonne journée à tous.

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 276
    Par défaut
    Il y a de grandes chances que ça vienne de ton code.
    Montre nous comment tu gères ça, sans pour autant nous filer 10000 lignes de code.

  3. #3
    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
    grosso modo ça sent le traitement lourd (genre connexion à une base) exécuté dans l'EDT alors qu'il devrait être exécuté dans un Thread à part.

    Bref voilà de la lecture pour toi expliquant les interactions entre threads et composants Swing/AWT http://gfx.developpez.com/tutoriel/j...ing-threading/

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2009
    Messages : 7
    Par défaut
    Merci Sinok, je vais aller lire ça.

    fr1man, je n'ai pas trop le temps là maintenant, mais j'essaierais de poster un exemple de code.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2009
    Messages : 7
    Par défaut
    Bonjour,

    alors j'ai parcouru le lien, mais c'est déjà ce qui est fait dans l'application. Et pour le code, je vais plutôt essayer d'en faire un résumé, car c'est long et tout plein de code métier inintéressants.

    Alors, mon applet initialise une JTable dont les données sont chargées par un SwingWorker. Pendant ce traitement, les objets qui constituent les données de la table sont donc créés et ils implémentent une méthode callback de l'api de mon fournisseur de données qui permet le push. Une fois ce traitement terminé, il n'y a plus de SwingWorker, normal.
    Lors d'une réception push, la méthode callback de mon objet est exécutée, je fais un petit traitement et je demande la mise à jour de ma table en créant un Runnable que je balance à Swing avec la méthode InvokeLater et qui va faire le tableFireRowsUpdated sur ma table.

    Comme vous pouvez le voir ci-dessous, je reçois des mise à jours très régulièrement :
    Wed Dec 23 17:05:25 CET 2009 : subs:6:/prices/multitype_price_list?
    Wed Dec 23 17:05:25 CET 2009 : subs:3:/prices/multitype_price_list?
    Wed Dec 23 17:05:25 CET 2009 : subs:0:/prices/multitype_price_list?
    Wed Dec 23 17:05:25 CET 2009 : subs:5:/prices/multitype_price_list?
    Wed Dec 23 17:05:25 CET 2009 : subs:2:/prices/multitype_price_list?
    Wed Dec 23 17:05:25 CET 2009 : subs:8:/prices/multitype_price_list?
    Wed Dec 23 17:05:25 CET 2009 : subs:23:/prices/multitype_price_list?
    Wed Dec 23 17:05:25 CET 2009 : subs:11:/prices/multitype_price_list?
    Wed Dec 23 17:05:25 CET 2009 : subs:11:/prices/multitype_price_list?
    Wed Dec 23 17:05:25 CET 2009 : subs:8:/prices/multitype_price_list?
    Wed Dec 23 17:05:25 CET 2009 : subs:5:/prices/multitype_price_list?
    Wed Dec 23 17:05:25 CET 2009 : subs:2:/prices/multitype_price_list?
    Wed Dec 23 17:05:25 CET 2009 : subs:23:/prices/multitype_price_list?
    Wed Dec 23 17:05:25 CET 2009 : subs:2:/prices/multitype_price_list?
    Wed Dec 23 17:05:25 CET 2009 : subs:5:/prices/multitype_price_list?
    Wed Dec 23 17:05:26 CET 2009 : subs:2:/prices/multitype_price_list?
    Wed Dec 23 17:05:27 CET 2009 : subs:11:/prices/multitype_price_list?
    Wed Dec 23 17:05:27 CET 2009 : subs:5:/prices/multitype_price_list?
    Wed Dec 23 17:05:27 CET 2009 : subs:5:/prices/multitype_price_list?
    etc ...

    J'ai remplacé mon invokeLater par un invokeAndWait afin de synchroniser mon affichage avec la réception des données, mais j'ai toujours des freezes qui arrivent de temps en temps. Ca dure très peu de temps, genre 2 ou 3 secondes, et tout un bloc est remis à jour comme expliqué en début de topic.

    Est-ce que ça peut être une bonne idée de tracer l'heure à chaque rafraichissement et de comparer avec l'heure de réception des données pour voir si un décalage qui se fait et si il freeze pour rattraper son retard ?

    Mais que vois-je ? Il est plus que temps d'aller finir mes courses de Noël

Discussions similaires

  1. Vitesse de rafraichissement des données
    Par StarMusic dans le forum Bases de données
    Réponses: 2
    Dernier message: 30/09/2005, 10h20
  2. [JTable] Tri des données
    Par soulhouf dans le forum Composants
    Réponses: 7
    Dernier message: 08/09/2005, 14h01
  3. question sur le rafraichissement des données dans la base
    Par vbcasimir dans le forum Bases de données
    Réponses: 8
    Dernier message: 06/06/2005, 12h44
  4. [JTable] Insérer des données?
    Par waldo2188 dans le forum Composants
    Réponses: 4
    Dernier message: 29/03/2005, 11h40
  5. [JTable] Perte des données
    Par david71 dans le forum Composants
    Réponses: 8
    Dernier message: 09/01/2005, 00h37

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