Zufällige Fehler beim Ändern von Serien mit JFreeChart
Einführung
Diese Frage untersucht ein aufgetretenes Problem beim Versuch, eine Reihe in einem JFreeChart-Diagramm dynamisch zu aktualisieren. Die ursprüngliche Implementierung führte zu Ausnahmen und falscher Datenanzeige.
Problem
Der bereitgestellte Code zielte darauf ab, eine Datenreihe innerhalb eines Threads zu ändern, stieß jedoch auf „Serienindex aus“. Ausnahmen für „Index außerhalb der Grenzen“ und „Index außerhalb der Grenzen“. Auch die Grafikanzeige funktionierte nicht richtig. Der Grund für diese Fehler war eine falsche Synchronisierung und die unangemessene Verwendung einer DateAxis.
Lösung
Der richtige Ansatz besteht darin, den Datensatz über die Methode „process()“ von zu aktualisieren ein SwingWorker. Darüber hinaus sollte für die Domäne eine NumberAxis anstelle einer DateAxis verwendet werden. Hier ist ein überarbeiteter Codeausschnitt, der diese Lösung demonstriert:
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); } }
Diskussion
Die Verwendung eines SwingWorkers gewährleistet eine ordnungsgemäße Synchronisierung und ermöglicht die sichere Aktualisierung des Datensatzes aus dem Worker heraus Faden. NumberAxis ist für die Domäne geeignet, da die X-Achse die Anzahl der Iterationen und nicht einen Zeitraum darstellt.
Alternativer Ansatz
Ein alternativer Ansatz ist die Verwendung einer DynamicTimeSeriesCollection . Diese Methode ist jedoch nicht geeignet, wenn die X-Achsen-Domäne auf Iterationen und nicht auf Zeiträumen basiert und Aktualisierungen erfordert, wenn die Berechnungen abgeschlossen sind, nicht in regelmäßigen Abständen.
Zusätzliche Hinweise
Das bereitgestellte Code-Snippet erstellt ein Liniendiagramm, das den Fortschritt einer Berechnung auf der Y-Achse darstellt. Die X-Achse stellt die Iterationsnummer dar. Das Diagramm wird im Verlauf der Berechnung dynamisch aktualisiert.
Das obige ist der detaillierte Inhalt vonWarum verursacht die dynamische Aktualisierung einer JFreeChart-Serie Ausnahmen vom Typ „Index außerhalb der Grenzen'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!