我正在制作一个显示背景计算结果的GUI。但在此之前,我想测试更改数据集。这是我的代码:
DefaultXYDataset dataset = new DefaultXYDataset();
@Override
public void run() {
// TODO Auto-generated method stub
for (int i = 0; i < periods; i++) {
series[0][i] = (double) i;
series[1][i] = 0;
}
dataset.addSeries("Series0", series);
for (int it = 0; it < 10; it++) {
series[1][random.nextInt(periods)] = random.nextInt(100) / 2;
double[][] d = new double[2][periods];
for (int i = 0; i < periods; i++) {
d[0][i] = series[0][i];
d[1][i] = series[1][i];
}
dataset.removeSeries("Series0");
dataset.addSeries("Series0", series);
// try {
// Thread.sleep(100);
// } catch (java.lang.InterruptedException ex) {
// }
}
正如你所看到的,我想改变图上的点(每次完成'一些复杂的计算') - 这个改变在我在另一个类中调用的线程中。我的问题是这整个概念都不起作用。它抛出'系列索引超出边界'-IllegalArgumentException,'索引越界' - 某些库内部arraylist等。我没有使用DynamicTimeSeriesCollection,因为我需要X轴是我内部迭代的数量而不是时间期间,并且当“某些计算”不是每隔一段时间完成时也会更新。你能告诉我我做错了什么吗?或者有更好的方法来更新/刷新图表吗?
答案 0 :(得分:9)
您的代码段未正确同步;您应该使用dataset
的{{1}}方法更新process()
,如图here所示。而不是SwingWorker
,请使用DateAxis
,如ChartFactory.createXYLineChart()
所示。
附录:所引用示例的这种变化描绘了工人在折线图上的进展。请注意,NumberAxis
对域和范围都使用createXYLineChart()
。
NumberAxis