Service 将进度条绑定到JavaFX中的服务

Service 将进度条绑定到JavaFX中的服务,service,javafx,binding,progress-bar,Service,Javafx,Binding,Progress Bar,我正在尝试将进度条绑定到服务的进度。我已经在scene builder中创建了进度条,并尝试了以下代码。但是进度条会持续运行,并不表示它所连接的服务。它应该在服务运行时运行,并表示正在下载的数据。如何绑定进度条来表示我创建的服务 @FXML private ProgressBar ProgressBar; service.start(); ProgressBar.progressProperty().bind(service.workDoneProperty()); 您应该将Progr

我正在尝试将进度条绑定到服务的进度。我已经在scene builder中创建了进度条,并尝试了以下代码。但是进度条会持续运行,并不表示它所连接的服务。它应该在服务运行时运行,并表示正在下载的数据。如何绑定进度条来表示我创建的服务

@FXML
private ProgressBar ProgressBar;
service.start();
ProgressBar.progressProperty().bind(service.workDoneProperty());    

您应该将ProgressBar的
progressProperty()
绑定到服务的
progressProperty()
,而不是绑定到它的workDoneProperty,即

import javafx.application.Application;
import javafx.concurrent.Service;
import javafx.concurrent.Task;
import javafx.scene.Scene;
import javafx.scene.control.ProgressBar;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class Main extends Application {
    @Override
    public void start(Stage primaryStage) throws Exception {

        ProgressBar progressBar = new ProgressBar();
        StackPane root = new StackPane(progressBar);
        Scene scene = new Scene(root, 200, 200);
        primaryStage.setScene(scene);
        primaryStage.show();
        Service service = new Service() {
            @Override
            protected Task createTask() {
                return new Task() {
                    @Override
                    protected Object call() throws Exception {
                        for(int i=0; i<100; i++){
                            updateProgress(i, 100);
                            try {
                                Thread.sleep(100);
                            } catch (InterruptedException e) {
                                e.printStackTrace();
                            }
                        }
                        return null;
                    }
                };
            }
        };
        progressBar.progressProperty().bind(service.progressProperty());
        service.start();
    }

    public static void main(String[] args) {
        Application.launch(args);
    }
}
导入javafx.application.application;
导入javafx.concurrent.Service;
导入javafx.concurrent.Task;
导入javafx.scene.scene;
导入javafx.scene.control.ProgressBar;
导入javafx.scene.layout.StackPane;
导入javafx.stage.stage;
公共类主扩展应用程序{
@凌驾
public void start(Stage primaryStage)引发异常{
ProgressBar ProgressBar=新的ProgressBar();
StackPane根=新的StackPane(progressBar);
场景=新场景(根,200200);
初级阶段。场景(场景);
primaryStage.show();
服务=新服务(){
@凌驾
受保护的任务createTask(){
返回新任务(){
@凌驾
受保护对象调用()引发异常{

对于(int i=0;i您应该将ProgressBar的
progressProperty()
绑定到服务的
progressProperty()
,而不是绑定到它的workDoneProperty,即

import javafx.application.Application;
import javafx.concurrent.Service;
import javafx.concurrent.Task;
import javafx.scene.Scene;
import javafx.scene.control.ProgressBar;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class Main extends Application {
    @Override
    public void start(Stage primaryStage) throws Exception {

        ProgressBar progressBar = new ProgressBar();
        StackPane root = new StackPane(progressBar);
        Scene scene = new Scene(root, 200, 200);
        primaryStage.setScene(scene);
        primaryStage.show();
        Service service = new Service() {
            @Override
            protected Task createTask() {
                return new Task() {
                    @Override
                    protected Object call() throws Exception {
                        for(int i=0; i<100; i++){
                            updateProgress(i, 100);
                            try {
                                Thread.sleep(100);
                            } catch (InterruptedException e) {
                                e.printStackTrace();
                            }
                        }
                        return null;
                    }
                };
            }
        };
        progressBar.progressProperty().bind(service.progressProperty());
        service.start();
    }

    public static void main(String[] args) {
        Application.launch(args);
    }
}
导入javafx.application.application;
导入javafx.concurrent.Service;
导入javafx.concurrent.Task;
导入javafx.scene.scene;
导入javafx.scene.control.ProgressBar;
导入javafx.scene.layout.StackPane;
导入javafx.stage.stage;
公共类主扩展应用程序{
@凌驾
public void start(Stage primaryStage)引发异常{
ProgressBar ProgressBar=新的ProgressBar();
StackPane根=新的StackPane(progressBar);
场景=新场景(根,200200);
初级阶段。场景(场景);
primaryStage.show();
服务=新服务(){
@凌驾
受保护的任务createTask(){
返回新任务(){
@凌驾
受保护对象调用()引发异常{

对于(int i=0;iHi@ItachiUchiha),我尝试了“service.progressProperty()'但是,在服务完成后,进度条仍会继续运行。在将进度条绑定到服务之前,我是否需要将进度条的值设置为零?我认为您的实现存在问题。您能否为您的问题添加更多关于如何实现进度条的详细信息?我有两个单独的线程,一个线程使用一个任务和服务,以及另一个构造GUI并具有一些功能的任务和服务。我在我的主线程“private DashService service;”中实例化了任务类的一个新实例,我正试图将其绑定到进度条上,就像一个符咒一样!我尝试了任务,但它一直失败,因为任务不会与p同步执行rogress indicator.Service拯救了这一天!嗨@ItachiUchiha,我已经尝试了'Service.progressProperty()'但是,在服务完成后,进度条仍会继续运行。在将进度条绑定到服务之前,我是否需要将进度条的值设置为零?我认为您的实现存在问题。您能否为您的问题添加更多关于如何实现进度条的详细信息?我有两个单独的线程,一个线程使用一个任务和服务,以及另一个构造GUI并具有一些功能的任务和服务。我在我的主线程“private DashService service;”中实例化了任务类的一个新实例,我正试图将其绑定到进度条上,就像一个符咒一样!我尝试了任务,但它一直失败,因为任务不会与p同步执行罗杰斯指示器。服务拯救了这一天!