我想更新管理多個建築物的應用程序。這些每個人都穿着它所包含的人數。每10秒鐘,每棟建築的人口增長1.如何從後臺週期性任務中修改模型屬性?
「更新」的意思是「從Swing到JavaFX的端口」。
目前的Swing應用程序實現與背景javax.swing.Timer
線程週期性動作:
new Timer(10000, (e) -> {
for (Building building : theSuperKawaiBuildingList) {
building.setPopulation(building.getPopulation() + 1);
}
});
...和model.Building
是一個子類的java.util.Observable
:
public class Building extends Observable {
private int population;
public synchronized int getPoulation() {
return population;
}
public synchronized void setPoulation(int value) {
population = value;
setChanged();
notifyObservers();
}
public Building(int initPopulation) {
population = initPopulation;
}
}
現在,我喜歡使用JavaFX而不是Swing以及API的綁定功能來構建新的GUI,可能會執行model.Building
類,如下所示:
public class Building {
// <editor-fold desc="FX Property - Population">
private final IntegerProperty population;
public IntegerProperty populationProperty() { return population; }
public int getPopulation() { return population.get(); }
public void setPopulation(int value) { population.set(value); }
// </editor-fold>
public Building(int initPopulation) {
population = new SimpleIntegerProperty(initPopulation);
}
}
我想java.util.Timer
可以適應法案,當涉及到定期的東西,但一些閱讀後,我懷疑更新一個屬性的(線程)安全性將被綁定到一個活動的場景圖一個後臺任務...
除非綁定帶有一些使我想做的事情變得可能的魔法,那麼最佳做法是什麼。
上下文PS:我是一個JavaFX初學者,這將是我第一個使用這個框架的應用程序。 – Odepax