我正嘗試在JavaFX下創建一個自定義Canvas小部件,該小部件從大量不相關的工作線程收集信息。 「更新」事件可能有不同的速率,有時太快,有時甚至沒有,意味着需要適當解決「太快的更新」和「空閒時間」的要求。更新數量太高,因此每次執行更新時發出一個Runnable並不是一個好的解決方案。JavaFX和Canvas的快速更新
只是爲了測試,我的蠻力方法是創建一個AnimationTimer來更新Canvas對象的視覺效果。這個解決方案工作正常,但是當然有時候Canvas不需要更新,從而使整個過程效率低下。
與我的問題最接近的答案似乎是this post與GUIUpdater助手類,但畫布似乎沒有直接更新屬性。我試圖找到一種方法來用綁定的參數「插入」所需的更新功能,但運氣不錯。我甚至嘗試瞭解Canvas是否有「更新」事件,但我沒有找到它。據我所知,我發現的所有其他答案都不符合要求。
在此先感謝
編輯
這裏是我用來確保代碼,只有當數據發生變化,那麼畫布將繪製:
new AnimationTimer() {
@Override
public void handle(long now) {
if (needsUpdate.getAndSet(false)) {
myCustomCanvasRepaint();
}
}
}.start();
這是觸發類似的東西:
AtomicBoolean needsUpdate = new AtomicBoolean(true);
...
public void needsUpdate() {
needsUpdate.set(true);
}
有關頻繁更新的相關問題:http://stackoverflow.com/questions/23488280/throttling-javafx-gui-updates –
這可能會解決「太頻繁」但不是「閒置」的情況。我會更新我的問題,以顯示我使用類似方法所做的工作。 – Panayotis
我不確定我是否理解「空閒」情況下的含義 –