使用 JFreeChart 修改系列时出现意外错误
问题:
尝试动态更新 JFreeChart情节,用户遇到“系列索引越界”和“索引越界”尝试在后台线程中更改数据集时出现异常。
根本原因:
问题是直接从后台线程(不是线程)修改数据集-安全操作。
解决方案:
为了确保线程安全更新,用户应该使用摇摆工人。此类提供了一种从后台线程更新 GUI 的安全方法,方法是更新 process() 方法中的数据集,该方法在事件调度线程 (EDT) 上调用。
替代解决方案:
对于 X 轴表示计数或迭代次数而不是时间的情况,应使用 NumberAxis 而不是 DateAxis。此更改还允许在计算完成时更新绘图,而不是按固定时间间隔更新。
示例代码实现:
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); } }
在此代码中, process() 方法用于在新数据可用时安全地更新 EDT 上的 XYSeries 数据集。 XYLineAndShapeRenderer 设置为渲染第一个系列的形状,使点在绘图上可见。
以上是如何从后台线程安全更新 JFreeChart 系列?的详细内容。更多信息请关注PHP中文网其他相关文章!