JavaFX-如何将任务进度属性绑定到call()方法中的另一个属性

JavaFX-如何将任务进度属性绑定到call()方法中的另一个属性,java,javafx,javafx-8,Java,Javafx,Javafx 8,我试图找出如何将任务的progress属性绑定到任务调用函数中使用的对象的属性 从概念上讲,我有一个对象,它做了一定的工作,并通过DoubleProperties公开了它的进度。由于我希望在JavaFX主线程之外完成这个(长时间运行的)任务,所以我希望将它包装在一个任务对象中,并能够显示底层对象的进度。然而,更新任务进度的唯一方法似乎是通过updateProgress()方法,该方法采用具体的数字,而不是观察值。类似地,progressProperty是作为ReadOnlyDoublePrope

我试图找出如何将任务的progress属性绑定到任务调用函数中使用的对象的属性

从概念上讲,我有一个对象,它做了一定的工作,并通过DoubleProperties公开了它的进度。由于我希望在JavaFX主线程之外完成这个(长时间运行的)任务,所以我希望将它包装在一个任务对象中,并能够显示底层对象的进度。然而,更新任务进度的唯一方法似乎是通过updateProgress()方法,该方法采用具体的数字,而不是观察值。类似地,progressProperty是作为ReadOnlyDoubleProperty公开的,因此我不能这样设置属性,也不能重写progressProperty()方法以返回我要用于显示进度的属性

更具体地说,这是我想做的:

final FooBuilder builder = new FooBuilder();
Task<Void> task = new Task<Void>() {
    @Override
    protected Void call() throws Exception {

         //
         // bind to FooBuilders progress property here...but how?
         // Progress of doLongBuildThing is reflected in an exposed
         // DoubleProperty in the FooBuilder class.
         //
         //       

         builder.doLongBuildingThing(); 
         return null;
    }           
};
final FooBuilder=new FooBuilder();
任务=新任务(){
@凌驾
受保护的Void调用()引发异常{
//
//在这里绑定到FooBuilders progress属性…但是如何绑定?
//多龙大厦的进展反映在一个暴露的环境中
//FooBuilder类中的DoubleProperty。
//
//       
builder.doLongBuildingThing();
返回null;
}           
};
这似乎是一件非常简单的基本事情,但我没有看到一个简单的方法来完成它。任何帮助都将不胜感激

蒂亚


因为您已经在对象中执行了进度,所以只需除以最大工时即可得到一个百分比,并将其直接绑定到(DoubleProperty)。为了安全起见,将绑定包装在Platform.runLater中,您基本上完成了任务中setProgress()的所有工作


(假设FooBuilder的progress属性范围为0到1)。

谢谢-这很好。由于构建器的寿命比调用程序长,因此我将lambda分配给对象,以便在调用方法的末尾重新调用Listener()。感谢您的帮助。我正在使用ControlFX Dialogs API(Dialogs.showWorkerProgress),因此无法访问底层进度条,否则我认为这将是一种解决方法。
builder.progressProperty().addListener((obs, oldProgress, newProgress) -> 
    updateProgress(newProgress, 1.0));