請幫助我的傢伙.. 我的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幫助我 –