Bonjour,
J'ai un nouveau problème pour mon application, sans doute lié à une mauvaise gestion des threads une fois de plus
Mon application comporte une fenêtre avec plusieurs éléments graphiques. Il y a un traitement qui se déroule en tâche de fond. Les éléments graphiques se mettent à jour peu à peu en observant le traitement. J'utilise pour cela Observer et Observable.
Exemple : j'ai un JTextArea qui affiche un flux de String.
Le traitement reçoit de temps en temps du flux. Une boucle while me permet de tout récupérer. Dès qu'il y a une pause dans le flux, la mise à jour du graphique se lance.
Mon souci vient du fait que certains flux sont longs dans la durée totale du traitement mais très court dans la boucle while.
Je sais pas si je suis très clair
En fait mon while boucle très rapidement car le flux s'arrête très vite. Or dans cette boucle je lance ma méthode de rafraichissement de ma fenêtre :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 SwingUtilities.invokeLater(new Runnable() { public void run() { change(); } });
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 public void change() { this.setChanged(); this.notifyObservers(); }
J'ai oublié de vous dire que j'ai créé un nouveau thread dans lequel j'ai encapsulé mon traitement.
J'en reviens à mon problème, quand mon while boucle trop vite et là c'est le drame
D'après moi les change() se font trop souvent. Ca se met à ramer, voire pire
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 Exception in thread "AWT-EventQueue-0" java.lang.OutOfMemoryError: Java heap space at java.util.Arrays.copyOf(Arrays.java:2882) at java.lang.AbstractStringBuilder.expandCapacity(AbstractStringBuilder.java:100) at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:390) at java.lang.StringBuilder.append(StringBuilder.java:119) at snec.models.audit.auditModel.AuditModel.setFlow(AuditModel.java:517) at snec.models.audit.controllers.AuditInProgress.TreatmentFlowController.update(TreatmentFlowController.java:52) at java.util.Observable.notifyObservers(Observable.java:142) at java.util.Observable.notifyObservers(Observable.java:98)
Voilà, si quelqu'un voit une grosse boulette de ma part![]()
Partager