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