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();