2016-11-23 100 views
0

我正在編寫一個應用程序,它將eyetracking數據映射到顯示給用戶的圖像。爲了確保GUI不會凍結,我在單獨的Task中進行eyetracking數據輪詢,映射和其他計算。JavaFX - 從不同線程調用GUI方法

我面臨的問題是,爲了將屏幕座標映射到我顯示的圖像上,我必須致電Node.screenToLocal(x,y)。我如何在不違反線程安全的情況下進行這些調用?

回答

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(); 
相關問題