Bonjour,
Je me lance dans l'utilisation des services et des tâches, histoire de débloquer mon UI.
Mais c'est encore assez confus pour moi... et je ne sais pas si je dois utiliser plutôt des services, ou plutôt des tâches.
En plus je ne suis pas sûr d'utiliser correctement la valeur "return" de ma tâche.
Voici la problématique dans son ensemble et puis un exemple de ce que j'utilise actuellement.
En fait j'ai une tableView basée sur une observableList "filtreOL" qui elle même est basée sur une observablelist "sourceOL".
L'utilisateur peut donc introduire des critères de filtre qui réduisent les items contenus dans ma filtreOL par rapport à ce qui est contenu dans ma sourceOL.
Ce filtre fonctionne en une fraction de seconde et répond donc parfaitement aux besoins.
Au chargement, ou parfois en cours d'utilisation, il est nécessaire de faire un appel en base de données pour créer ou recréer mon "sourceOL".
Cette opération étant longue, je voudrais la passer en tâche de fond, pour pouvoir mettre des boutons en "disabled" et le curseur en "Wait".
Je cherche donc à remplacer mon "olSource" par une nouvelle observableList rafraichie.
dans le code ci-dessous, j'ai créé une ObservableList "results" qui est en dehors de ma tâche et qui est mise à jour par ma tâche. Je ne pense pas que ce soit la bonne utilisation...
Je voudrais récupérer "results" une fois que la tâche est terminée. Il y a bien l'instruction "return results;" mais ça me le retourne où ??
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
39
40
41
42 package application; import javafx.application.Application; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.concurrent.Task; import javafx.scene.Group; import javafx.scene.Scene; import javafx.stage.Stage; public class Main extends Application { @Override public void start(Stage stage) { Group root = new Group(); Scene scene = new Scene(root, 300, 150); stage.setScene(scene); stage.setTitle("Sample"); ObservableList<String> results = FXCollections.observableArrayList(); Task<ObservableList<String>> task = new Task<ObservableList<String>>() { @Override protected ObservableList<String> call() throws Exception { updateMessage("message"); //ObservableList<String> results = FXCollections.observableArrayList(); for (int i=0; i<10; i++) { if (isCancelled()) break; results.add("aaa" + i); updateProgress(i, 100); } return results; } }; task.run(); System.out.println(results.get(3)); stage.show(); } public static void main(String[] args) { launch(args); } }
Merci d'avance pour votre aide
Partager