0
我有兩個折線圖,其中一個折線圖即chart1,我正在連續更新值,在其他圖表即chart2中,基於chart1的峯值,我正在嘗試以顯示chart2中chart1的峯值。如果峯值(即4到10)數量較少,那麼沒有問題,如果峯值更大,那麼我的折線圖應用程序變得太慢。爲了不斷更新chart1和chart2中的值,我使用了Animation timer。如何使用實時數據連續更新折線圖
下面是很少峯值
下面的圖像有更多的峯值,然後我的申請被掛
爲了獲得更好的性能如何與動畫計時器做。
代碼更新
在addDataToSeries功能我加入1600個隨機值,並在chart1填充值。
在addRffDataToSeries功能,我從你從一些Web服務調用獲取數據或閱讀一些隊列什麼都源填充在chart2
private void prepareTimeLine() {
timer = new AnimationTimer() {
@Override
public void handle(long l) {
plotData.addDataToSeries();
}
};
}
private void startTimer() {
timer.start();
}
private void stopTimer() {
timer.stop();
System.out.println(" " + lineChart.getData().size());
System.out.println(" " + series.getData().size());
if (lineChart.getData().size() > 0) {
series.getData().remove(0, series.getData().size());
}
}
private void prepareRffTimeLine() {
rffTimer = new AnimationTimer() {
@Override
public void handle(long l) {
rffSeries.getData().remove(0, rffSeries.getData().size());
plotData.addRffDataToSeries();
}
};
}
private void startRffTimer() {
rffTimer.start();
}
private void stopRffTimer() {
rffTimer.stop();
if (rffLineChart.getData().size() > 0) {
rffSeries.getData().remove(0, rffSeries.getData().size());
}
}
public void addDataToSeries() {
double x = 0;
double y = 0;
int i = 1;
seriesXData.clear();
seriesYData.clear();
for (i = 1; i <= 1596; i++) {
x = Math.random() * i + 1;
y = (Math.random() * ((-100) - (-130))) + -130;
seriesXData.add(new XYChart.Data(x, y));
seriesYData.add(new XYChart.Data(x, y));
}
seriesXData.add(new XYChart.Data(300.0, -60.0));
seriesXData.add(new XYChart.Data(600.0, -50.0));
seriesXData.add(new XYChart.Data(900.0, -30.0));
seriesXData.add(new XYChart.Data(1300.0, -10.0));
seriesYData.add(new XYChart.Data(300.0, -60.0));
seriesYData.add(new XYChart.Data(600.0, -50.0));
seriesYData.add(new XYChart.Data(900.0, -30.0));
seriesYData.add(new XYChart.Data(1300.0, -10.0));
Collections.sort(seriesXData, new ArrangeXData());
Collections.sort(seriesYData, new ArrangeYData());
series.getData().addAll(seriesXData);
if (series.getData().size() > 1600) {
series.getData().remove(0, 1600);
}
}
public void addRffDataToSeries() {
Comparator<XYChart.Data<Double, Double>> c = new Comparator<XYChart.Data<Double, Double>>() {
@Override
public int compare(XYChart.Data<Double, Double> o1, XYChart.Data<Double, Double> o2) {
return o1.getYValue().compareTo(o2.getYValue());
}
};
int index = Collections.binarySearch(seriesYData, new XYChart.Data<Double, Double>(null, Double.parseDouble(String.valueOf(Line.y))), c);
int insertion_point = -(index + 1);
if (seriesYData.size() <= 0) {
return;
}
List<XYChart.Data<Double, Double>> res = seriesYData.subList(insertion_point, seriesYData.size());
for (int ind = 0; ind < res.size(); ind++) {
for (int pos = Bounds.x; pos > Bounds.y; pos--) {
rffSeries.getData().add(new XYChart.Data(res.get(ind).getXValue(), pos));
}
}
}
......那裏應該有個問題嗎? – specializt
@specializt OP想改善代碼的性能 – Lrrr
你能展示一些相關的代碼嗎? –