Maison > Java > javaDidacticiel > Comment mettre à jour en toute sécurité la série JFreeChart à partir d'un fil de discussion en arrière-plan ?

Comment mettre à jour en toute sécurité la série JFreeChart à partir d'un fil de discussion en arrière-plan ?

Patricia Arquette
Libérer: 2024-12-16 11:29:14
original
320 Les gens l'ont consulté

How to Safely Update JFreeChart Series from a Background Thread?

Erreurs inattendues lors de la modification d'une série avec JFreeChart

Problème :
Dans une tentative de mise à jour dynamique d'un JFreeChart plot, un utilisateur a rencontré des exceptions « Index de série hors limites » et « Index hors limites » en essayant de modifier le ensemble de données dans un thread d'arrière-plan.

Cause première :
Le problème était que l'ensemble de données était modifié directement à partir d'un thread d'arrière-plan, ce qui n'est pas une opération thread-safe.

Résolution :
Pour garantir des mises à jour sécurisées pour les threads, l'utilisateur doit utiliser un SwingWorker. Cette classe fournit un moyen sûr de mettre à jour l'interface graphique à partir des threads d'arrière-plan en mettant à jour l'ensemble de données dans la méthode process(), qui est invoquée sur le thread de répartition d'événements (EDT).

Solution alternative :
Pour les situations où l'axe X représente un nombre ou un nombre d'itérations plutôt que le temps, NumberAxis doit être utilisé à la place de DateAxis. Ce changement permet également de mettre à jour le tracé à mesure que les calculs sont terminés, plutôt qu'à intervalles de temps fixes.

Exemple d'implémentation de code :

private XYSeries series = new XYSeries("Result");
...
@Override
protected void process(List<Double> chunks) {
    for (double d : chunks) {
        label.setText(df.format(d));
        series.add(++n, d);
    }
}
Copier après la connexion

Dans ce code, le La méthode process() est utilisée pour mettre à jour en toute sécurité l'ensemble de données XYSeries sur l'EDT à mesure que de nouvelles données deviennent disponibles. Le XYLineAndShapeRenderer est configuré pour restituer les formes de la première série, rendant les points visibles sur le tracé.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal