我正在尝试在 JavaFX 下创建一个自定义 Canvas 小部件,它从许多不相关的工作线程中收集信息。“更新”事件可能以各种速率出现,有时太快,有时根本没有,这意味着需要正确解决“更新太快”和“空闲时间”要求。更新次数太多,因此每次执行更新时发出Runnable并不是一个好的解决方案。
只是为了测试,我的蛮力方法是创建一个AnimationTimer来更新 Canvas 对象的视觉效果。该解决方案运行良好,但当然有时 Canvas 不需要更新,从而使整个过程效率低下。
我的问题最接近的答案似乎是这篇带有 GUIUpdater 帮助器类的帖子,但 Canvas 似乎没有直接更新属性。我正在尝试找到一种方法来使用绑定参数“插入”所需的更新功能,但很幸运。我什至试图了解 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);
}