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
Susan Sarandonoriginal
2024-12-21 19:43:12964parcourir

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);
    }
}

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!

Déclaration:
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