Maison > Java > javaDidacticiel > Pourquoi la mise à jour d'une série JFreeChart provoque-t-elle dynamiquement des exceptions « Index hors limites » ?

Pourquoi la mise à jour d'une série JFreeChart provoque-t-elle dynamiquement des exceptions « Index hors limites » ?

Susan Sarandon
Libérer: 2024-12-21 19:43:12
original
959 Les gens l'ont consulté

Why Does Updating a JFreeChart Series Dynamically Cause

Erreurs aléatoires lors du changement de série à l'aide de JFreeChart

Introduction

Cette question explore un problème rencontré en essayant de mettre à jour dynamiquement une série dans un graphique JFreeChart. L'implémentation d'origine entraînait des exceptions et un affichage incorrect des données.

Problème

Le code fourni visait à modifier une série de données dans un thread, mais il rencontrait "Series index out des limites » et des exceptions « index hors limites ». L'affichage graphique a également mal fonctionné. La raison de ces erreurs était une synchronisation incorrecte et l'utilisation inappropriée d'un DateAxis.

Solution

L'approche correcte consiste à mettre à jour l'ensemble de données à partir de la méthode process() de un SwingWorker. De plus, un NumberAxis doit être utilisé pour le domaine au lieu d'un DateAxis. Voici un extrait de code révisé qui illustre cette solution :

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

Discussion

L'utilisation d'un SwingWorker garantit une synchronisation appropriée et permet à l'ensemble de données d'être mis à jour en toute sécurité depuis le travailleur. fil de discussion. NumberAxis est approprié pour le domaine car l'axe X représente le nombre d'itérations, pas une période de temps.

Approche alternative

Une approche alternative consiste à utiliser une DynamicTimeSeriesCollection . Cependant, cette méthode ne convient pas lorsque le domaine de l'axe X est basé sur des itérations et non sur des périodes de temps, et nécessite des mises à jour lorsque les calculs sont terminés, et non à intervalles réguliers.

Notes supplémentaires

L'extrait de code fourni crée un graphique linéaire qui trace la progression d'un calcul sur l'axe Y. L'axe X représente le numéro d'itération. Le graphique se met à jour dynamiquement au fur et à mesure que le calcul progresse.

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