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:
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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; } }
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!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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; } }
3/ J'ai essayé de resoudre ça en attendant que la tâche se termine:
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...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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; } }
A ce point, je suis à cours d'idée qur comment faire. Quelqu'un aurait une solution?
Merci!
Partager