IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

EDT/SwingWorker Java Discussion :

Mise à jour d'une JFrame, ça rame sec !


Sujet :

EDT/SwingWorker Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Profil pro
    Inscrit en
    Août 2008
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 265
    Par défaut 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

    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

  2. #2
    Membre éclairé Avatar de DjGonk
    Profil pro
    Inscrit en
    Février 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 88
    Par défaut
    Essaye de regarder du côté du SwingWorker et de sa méthode publish. Cela t'évitera de bloquer ton IHM, de plus je te conseil de limiter le nombre de ligne de ton JTextArea pour éviter d'avoir un OutOfMemoryError.

    http://rom.developpez.com/java-swingworker/

  3. #3
    Membre très actif
    Profil pro
    Inscrit en
    Août 2008
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 265
    Par défaut
    Ok, merci bien.

    J'ai trouvé à quoi l'erreur était due

    Cependant je vais regarder ce que tu me proposes, tout allégement du programme est bienvenue





    EDIT : effectivement j'aurais du utiliser le SwingWorker depuis le départ

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Mise à jour d'une image dans JFrame
    Par nouraty dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 09/03/2012, 16h07
  2. mise a jour d'une jframe
    Par marwen09 dans le forum Agents de placement/Fenêtres
    Réponses: 11
    Dernier message: 29/04/2010, 17h20
  3. Mise à jour d'une table avec un fichier csv
    Par blackangel dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 26/05/2005, 14h46
  4. Mise à jour d'une bd mysql
    Par joquetino dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 11/01/2005, 14h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo