2016-03-31 5 views
0

Ich versuche, einen Fortschrittsbalken an den Fortschritt eines Dienstes zu binden. Ich habe den Fortschrittsbalken im Szenengenerator erstellt und den folgenden Code versucht. Der Fortschrittsbalken wird jedoch kontinuierlich ausgeführt und stellt nicht den Dienst dar, mit dem er verbunden ist. Es sollte ausgeführt werden, während der Dienst ausgeführt wird, und die heruntergeladenen Daten darstellen. Wie binde ich den Fortschrittsbalken, um den Dienst darzustellen, den ich erstellt habe.Binding Fortschrittsbalken zu einem Dienst in JavaFX

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

Antwort

1

Sie sollten binden ProgressBar des progressProperty() an den Service des progressProperty() und nicht auf seine workDoneProperty dh

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); 
    } 
} 
+0

Hallo @ItachiUchiha, ich habe die 'service.progressProperty() versucht, aber der Fortschrittsbalken noch weiter laufen , nachdem der Dienst beendet wurde. Muss ich den Wert des Fortschrittsbalkens auf Null setzen, bevor er an den Service gebunden wird? – borson89

+0

Ich denke, es gibt ein Problem mit Ihrer Implementierung. Können Sie Ihrer Frage weitere Details hinzufügen, wie haben Sie sie implementiert? – ItachiUchiha

+0

Ich habe zwei separate Threads, einen, der die Daten mithilfe einer Task und eines Dienstes abruft, und einen anderen, der die GUI erstellt und über einige Funktionen verfügt. Ich habe eine neue Instanz der Aufgabenklasse in meinem Hauptthread – borson89