2016-11-23 1 views
0

Ich schreibe eine Anwendung, die Eyetracking-Daten einem Bild zuordnet, das dem Benutzer angezeigt wird. Um sicherzustellen, dass die GUI nicht einfriert, mache ich die Eyetracking Datenabfrage, Mapping und andere Berechnungen in einem separaten Task.JavaFX - Aufruf von GUI-Methoden aus einem anderen Thread

Das Problem, das mir gegenübersteht, ist, dass für die Zuordnung von Bildschirmkoordinaten zu meinem angezeigten Bild ich Node.screenToLocal(x,y) anrufen muss. Wie kann ich diese Anrufe tätigen, ohne die Thread-Sicherheit zu verletzen?

Antwort

1

Verwenden Sie ein AnimationTimer diesen Aufruf zu tun:

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