あなたは、サービスの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);
}
}
こんにちは@ItachiUchihaに、私は「service.progressPropertyを()」試みたが、プログレスバーがまだ実行を継続しません、サービスが終了した後。プログレスバーをサービスにバインドする前に、プログレスバーの値を0に設定する必要がありますか? – borson89
あなたの実装に問題があると思います。どのように実装したのですか? – ItachiUchiha
私はタスクとサービスを使用してデータを取得するスレッドとGUIを構築する別のスレッドの2つのスレッドを持ち、いくつかの機能を備えています。私はメインスレッドでタスククラスの新しいインスタンスをインスタンス化しました – borson89