Bonjour,
je dispose d'une application en MVC, dont le fonctionnement est un peu particulier.
Je génère beaucoup d'instances d'une certaine classe définie observable et faisant un notify() depuis le constructeur. Ceci à pour effet d'appeler la fonction update() de mon contrôleur.
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 /** * Constructeur à partir d'un MotifValide pere et d'un MotifValide mere */ public MotifCandidat(MotifValide pere, MotifValide mere){ this.pere = pere; this.mere = mere; this.calculerMesures(); this.addObserver(Traitement.getObsMemoire()); this.mynotify(); } /** * Fonction de notification aux observateurs du modèle * fixe l'objet à changed et lance la notification */ public void mynotify () { this.setChanged(); this.notifyObservers(); }
Ce controleur me permet de suivre la consommation mémoire; pour cela, j'ai un champ dans ma vue qui va être rempli par l'update() du contrôleur :
Lorsque je lance ma fenêtre, cette fonction est appelée est affiche correctement les informations sur la vue.
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 @Override /** * Fonction appelée lorsque la classe est notifiée * met à jour les champs sur la fenêtre graphique */ public void update(Observable o, Object arg) { //Récupération des informations à partir du Runtime long freeMemory = Runtime.getRuntime().freeMemory(); long maxMemory = Runtime.getRuntime().maxMemory(); long totalMemory = Runtime.getRuntime().totalMemory(); //Construction de la chaîne à afficher String toDisplay = "Mémoire utilisée : " + ((totalMemory - freeMemory)/1024) + " Ko (" + ((totalMemory - freeMemory) * 100 /maxMemory) + "%)"+" | Mémoire maximum JVM : "+ maxMemory/1024/1024+" Mo"; //Récupération de la zone d'affichage et mise à jour this.vue.getFieldInfos().setText(toDisplay); }
Lorsque je lance la génération d'un grand nombre d'instances de la classe observable, les informations mémoire de la fenêtre ne sont PAS mises à jour sur la vue.
Lorsque la génération stoppe, les informations mémoire sont mises à jour sur la vue.
Du coup, j'ai mis un coup de System.out.println(toDisplay) dans la fonction update() et ... elle est bien appelée lors de la génération en grand nombre, ma chaîne est construite en mémoiremais n'est pas retranscrite sur la vue malgré le setText()
Des solutions ? Des idées ? Je dois avouer que je ne vois pas trop quoi faire (j'ai essayer de placer un .validate() et un .repaint() après le setText() mais rien n'y fait)...
Merci d'avance
Partager