JavaFX为其图表系列使用可观察列表。我想从不同的线程加载系列中的数据,我已经使用Task和Platform.runLater完成了。但是,用户界面仍然不是很敏感,而且数据看起来并不顺畅。
我希望发生以下情况:
数据在图表中平滑加载 - 每个系列中一次加载一个。
操作顺序:
代码的相关部分:
将系列载入图表
private static ObservableList<XYChart.Series<Number, Number>> pathSeries = FXCollections.observableArrayList();
final LineChart<Number,Number> pathChart =
new LineChart<Number,Number>(xAxis,yAxis);
for (int n=0; n<proc.getNumPath(); n++)
{
pathSeries.add(new Series<Number, Number>());
}
pathChart.getData().addAll(pathSeries);
将数据加载到系列
Task task = new Task<Void>() {
@Override public Void call() {
// PATH SERIES
for (int n=0; n<proc.getNumPath(); n++)
{
for(int i=0; i<=proc.getM(); i++)
{
int pathNumber = n;
int dataIndex = i;
Platform.runLater(new Runnable() {
@Override
public void run() {
pathSeries.get(pathNumber).getData().add(new XYChart.Data<Number, Number>(proc.getT()[dataIndex],
proc.getX()[pathNumber][dataIndex]));
}
});
if (isCancelled()) {
updateMessage("Cancelled");
break;
}
}
}
return null;
}
};
@FXML
public void initialize(){
generateButton.setOnAction(e -> {
pathWorker = new Thread(task);
pathWorker.setDaemon(true);
pathWorker.start();
});
}
如何在不太复杂的情况下改进代码?
答案 0 :(得分:0)
在for循环中使用它。
Thread.sleep(100);