Bonjour à toutes et à tous,
Je créer un logiciel qui permet d'afficher des données dans des ListView. Mon problème : je n'arrive pas à afficher dès le lancement du logiciel ma ListView remplie.
En fait la difficulté se situe au niveau de la modularité de ma ListView, je commence auparavant par récupérer des infos dans un fichier qui me serviront ensuite à remplir ma ListView.
C'est ma méthode majListView() qui est incompatible avec le start, sauf que je ne vois pas d'autres moyens pour mettre à jour ma ListView dès le premier affichage.
Je pense cerner mon problème, en fait le start n'a pas fini son exécution et donc mon instance FXML "public ListView<String> teamList;" qui se trouve dans le Controller n'a pas encore eu l'occasion de s'initialiser.
Cela provoque l'exception : java.lang.NullPointerException en provenance de la ligne 9 "teamList.getItems().clear();" et donc aussi de la ligne "teamList.getItems().add(a);".
La solution serait-elle de faire un timer, ou de chainer le start avec ma methode majListView() ? Bref je vous pose la question car cela me parait asser basique de mettre à jour mon logiciel à chaque fois que j'arrive sur la fenêtre en question et cependant je ne parviens pas à trouver de solution efficace.
Je vous remercie d'avance pour votre aide.
N'hésitez pas à me poser des questions si je ne suis pas clair.
Dans le start j'ai ajouté une methode .majListView() qui récupère des information pour remplir ma ListView. La méthode se situe dans mon Controller.
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 public class MainECDL extends Application { public void start(Stage primaryStage){ try { Parent root = FXMLLoader.load(getClass().getResource("MainView.fxml")); primaryStage.setScene(new Scene(root)); } catch (Exception e) { e.printStackTrace(); } //initialisation de mon controller Controller ct = new Controller(); //création de mon stage primaryStage.show(); //methode pour mettre à jour ma ListView ct.majListView(); } /* le main un peu plus loin lance le logiciel */ }
Ma ListView est constitué de String et se prénome "teamList"
j'ai un fichier nommé "autoCount.conf" dans le fichier utilisateur pour stocker mes informations.
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 public class Controllerone { @FXML public ListView<String> teamList; public void majListView() throws IOException { //suppression des infos éventuellement présentes dans ma ListView teamList.getItems().clear(); //récupération du fichier String chaineInformation = new String(String.valueOf(Files.readAllLines(Paths.get(System.getProperty("user.dir") + "/autoCount.conf")))); //met les infos une par une dans un tableau String[] array = chaineInformation.split(", "); //ajoute chaque élément du tableau dans la ListView for (String a: array) { teamList.getItems().add(a); } }
Partager