JavaFX - 从不同的线程调用GUI方法

时间:2016-11-23 23:33:24

标签: java multithreading javafx

我正在编写一个应用程序,将眼睛跟踪数据映射到显示给用户的图像。为了确保GUI不冻结我在单独的Task中进行眼动跟踪数据轮询,映射和其他计算。

我面临的问题是,为了将屏幕坐标映射到我显示的图像,我必须调用Node.screenToLocal(x,y)。如何在不违反线程安全的情况下进行这些调用?

1 个答案:

答案 0 :(得分:1)

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