请帮助我的家伙.. 我的observablelist已成功更新后台线程。 但我的GUI更新不准确。JavaFX饼图ObservableList(图表GUI更新不准确,当传递线程)
addPiechart1到HBOX addPieChart2从piechart1
observablelist2 = getobservablelist HBOX
observablelist1 = getobservablelist从piechart2
通observablelist1主题 通observablelist2主题 前
上我致电
animatePie(observablelist1,value1);
animatePie(observablelist2,value2);
public void animatePie(ObservableList<PieChart.Data> obs,int[] value){
ExecutorService executor = Executors.newCachedThreadPool(new ThreadFactory() {
@Override public Thread newThread(Runnable r) {
Thread thread = new Thread(r);
thread.setDaemon(true);
return thread;
}
});
pieAddToQueue add = new pieAddToQueue(obs,value);
//add.run();
executor.execute(add);
}
private class pieAddToQueue implements Runnable {
ObservableList<PieChart.Data> observableData;
int[] value;
int loop;
public pieAddToQueue(ObservableList<PieChart.Data> obs,int[] value){
observableData=obs;
this.value=value;
loop=0;
}
@Override
public void run() {
for(int i=0;i<value.length;i++){
observableData.get(i).setPieValue(value[i]);
try {
Thread.sleep(200);
} catch (InterruptedException ex) {
Logger.getLogger(MISInfoBoardBottom.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
}
不知道我理解你的伪代码,但它看起来像你从后台线程更新饼图(通过其数据列表)。你不能这么做:你必须在'Platform.runLater(...)'中将调用包装为'observableData.get(i).setPieValue(...)'。 –
感谢您的回复。是的,你有想法。我在后台线程中更改了observablelist数据。可观察列表数据成功更改,但我的GUI中的饼图有时不会检测到我的可观察列表已由后台线程更新。这就是为什么我的饼图粘贴几片。当我将Platform.runlater作为包装添加时,可观察数据已更新 –
。线程完成后GUI将会更新。我希望在更改后台线程中可观察列表的数据后立即更新某些内容。 :(PLS帮助我 –