0
我正在编写一个应用程序,它将eyetracking数据映射到显示给用户的图像。为了确保GUI不会冻结,我在单独的Task
中进行eyetracking数据轮询,映射和其他计算。JavaFX - 从不同线程调用GUI方法
我面临的问题是,为了将屏幕坐标映射到我显示的图像上,我必须致电Node.screenToLocal(x,y)
。我如何在不违反线程安全的情况下进行这些调用?
我正在编写一个应用程序,它将eyetracking数据映射到显示给用户的图像。为了确保GUI不会冻结,我在单独的Task
中进行eyetracking数据轮询,映射和其他计算。JavaFX - 从不同线程调用GUI方法
我面临的问题是,为了将屏幕坐标映射到我显示的图像上,我必须致电Node.screenToLocal(x,y)
。我如何在不违反线程安全的情况下进行这些调用?
使用AnimationTimer
为此呼吁:
Task<Point2D> task = new Task<Point2D>() {
@Override
protected Point2D call() throws Exception {
while (!isCancelled()) {
Point2D eyePos = getEyePos();
updateValue(eyePos);
}
}
};
AnimationTimer animation = new AnimationTimer() {
@Override
public void handle(long now) {
Point2D point = task.getValue();
if (value != null) {
Point2D pointOnScreen = node.screenToLocal(point);
// TODO: use result
}
}
};
animation.play();