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

标签 java multithreading 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();

关于JavaFX - 从不同线程调用 GUI 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40775870/

相关文章:

java - 如何将事件的开始时间和结束时间与其他事件的开始时间和结束时间进行比较

java - 带有限定符 @Default 的类型 ZZZZ 的不满足依赖关系

java - 相当于Android中的javax.swing.Timer

java - 在 JavaFX 中将形状放置在 Canvas 上

java - 在 Eclipse Luna 中安装 JavaFX

Java 三元运算符 (? :) doesn't work; second or third operand return boolean

java - Spring AOP 建议的方法不起作用。我的配置看起来没问题

C++ 线程和变量

java - 音轨在 Android 中不工作

JavaFX:如何制作合适的垂直工具栏?