Progressbar et ordre d'execution des tâches
Bonjour,
j'ai des problèmes avec l'ordre d’exécution de mes tâches.
Je m'explique:
1/ J'ai initialement créer une classe Annotation afin de renvoyer diverses info depuis un fichier:
Code:
1 2 3 4 5 6 7 8 9 10
| public class Annotion {
public List<Variant> main(File file) {
return annote(file);
}
private List<Variant> annote(File file){
List<Variant> listVar = new ArrayList<Variant>();
//ma fonction ici...
return listVar;
}
} |
2/ Jusque là pas de problème. J'ai voulu ajouter une barre de progression, et ai donc mis la fonction dans une tâche:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| public class Annotion {
private List<Variant> listVar = new ArrayList<Variant>();
public List<Variant> main(File file) {
//Tâche
Task task = new Task<Void>() {
@Override public Void call() {
listVar = annote(file);
return null;
}
};
//Indicateur de progression
ProgressIndicator bar = new ProgressIndicator();
bar.progressProperty().bind(task.progressProperty());
Group root = new Group();
Scene scene = new Scene(root, 300, 250);
Stage stage = new Stage();
stage.setScene(scene);
stage.setTitle("Progress Controls");
scene.setRoot(bar);
stage.show();
//Début de la tâche
Thread t = new Thread(task);
t.start();
//Retour de la liste mise à jour
return listVar;
}
private List<Variant> annote(File file){
List<Variant> listVar = new ArrayList<Variant>();
//ma fonction ici...
return listVar;
}
} |
J'ai alors rencontré un problème: la tâche commence, avec une belle barre de progression, puis retourne la liste... alors que la tâche n'est pas finie! Et donc la liste loin d'être complête!
3/ J'ai essayé de resoudre ça en attendant que la tâche se termine:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| public class Annotion {
private List<Variant> listVar = new ArrayList<Variant>();
private Boolean running;
public List<Variant> main(File file) {
//Tâche
Task task = new Task<Void>() {
@Override public Void call() {
listVar = annote(file);
return null;
}
};
//Indicateur de progression
ProgressIndicator bar = new ProgressIndicator();
bar.progressProperty().bind(task.progressProperty());
Group root = new Group();
Scene scene = new Scene(root, 300, 250);
Stage stage = new Stage();
stage.setScene(scene);
stage.setTitle("Progress Controls");
scene.setRoot(bar);
stage.show();
//Début de la tâche
running = true;
Thread t = new Thread(task);
t.start();
//Attendre la fin de la tâche
while (running){}
//Retour de la liste mise à jour
return listVar;
}
private List<Variant> annote(File file){
List<Variant> listVar = new ArrayList<Variant>();
//ma fonction ici...
running = false;
return listVar;
}
} |
Nouveau problème: la barre de progression est vide... jusqu'à ce que la tâche finnisse! J'ai fini par comprendre que la barre de progression ne commence à "tourner" que lorsque toute la méthode est exécutée...
A ce point, je suis à cours d'idée qur comment faire. Quelqu'un aurait une solution?
Merci!