Mise à jour d'une JFrame, ça rame sec !
Bonjour,
J'ai un nouveau problème pour mon application, sans doute lié à une mauvaise gestion des threads une fois de plus :aie:
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 :roll:
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:
1 2 3 4 5
| SwingUtilities.invokeLater(new Runnable() {
public void run() {
change();
}
}); |
Code:
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. :oops:
J'en reviens à mon problème, quand mon while boucle trop vite et là c'est le drame :aie:
D'après moi les change() se font trop souvent. Ca se met à ramer, voire pire 8O
Code:
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 :roll: