Hallo, ich habe ein kleines Problem und komme einfach nicht weiter.
Ich habe eine Anwendung geschrieben, die eine Oberfläche mit einem Start Button bietet. Sie soll mit dem Click auf den Button eine Task ausführen, die im Hintergrund eine Datei einließt und dem Benutzer den Fortschritt anhand einer ProgressBar anzeigt. Die Beispiele, die ich im Internet finde, sehen alle so ähnlich aus, wie das unten aufgeführte. Es wird immer eine Schleife in der Task ausgeführt, die die Methode updateProgress(currentState, maxState) aufruft um die ProgressBar zu aktualisieren.
Ich habe jedoch keine Schleife, sondern erzeuge ein neues Objekt. Das neu erzeugte Objekt bietet dem Task über Getter Methoden die einzulesende Bytegröße und die bereits eingelesene Bytegröße an. Das würde mit der UpdateProgress Methode harmonieren, denke ich.
Mein Problem ist, dass ich nicht weiß, wie der Task beim Einlesen der Datei den Status über die Getter abrufen kann. Wenn es möglich ist, würde ich es mit den von JavaFX angebotenen Möglichkeiten realisieren (Concurrencies, Properties und Bindings, ..).
Ich bedanke mich vielmals für jeden hilfreichen Beitrag!!!
Ich habe eine Anwendung geschrieben, die eine Oberfläche mit einem Start Button bietet. Sie soll mit dem Click auf den Button eine Task ausführen, die im Hintergrund eine Datei einließt und dem Benutzer den Fortschritt anhand einer ProgressBar anzeigt. Die Beispiele, die ich im Internet finde, sehen alle so ähnlich aus, wie das unten aufgeführte. Es wird immer eine Schleife in der Task ausgeführt, die die Methode updateProgress(currentState, maxState) aufruft um die ProgressBar zu aktualisieren.
Ich habe jedoch keine Schleife, sondern erzeuge ein neues Objekt. Das neu erzeugte Objekt bietet dem Task über Getter Methoden die einzulesende Bytegröße und die bereits eingelesene Bytegröße an. Das würde mit der UpdateProgress Methode harmonieren, denke ich.
Mein Problem ist, dass ich nicht weiß, wie der Task beim Einlesen der Datei den Status über die Getter abrufen kann. Wenn es möglich ist, würde ich es mit den von JavaFX angebotenen Möglichkeiten realisieren (Concurrencies, Properties und Bindings, ..).
Java:
import javafx.concurrent.Task;
Task task = new Task<Void>() {
@Override public Void call() {
static final int max = 1000000;
// anstatt dieser Schleife würde ich hier gerne ein Objekt initialisieren,
//welches eine Datei einließt und den Fortschritt ausgibt.
for (int i=1; i<=max; i++) {
updateProgress(i, max);
}
return null;
}
};
ProgressBar bar = new ProgressBar();
bar.progressProperty().bind(task.progressProperty());
new Thread(task).start();
Ich bedanke mich vielmals für jeden hilfreichen Beitrag!!!