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 :

Rafraichissement d'un JTextArea


Sujet :

EDT/SwingWorker Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    492
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 492
    Par défaut Rafraichissement d'un JTextArea
    Bonjour,

    je crée une frame avec un JTextArea que j'alimente au fur et à mesure de l'exécution de mon programme, mais le frame ne se rafraichit pas, il reste comme sur l'image jointe.

    voici le code qui ajoute une ligne à mon JTextArea :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public void addText(final String str) {
            SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    Output.append(str + newline);
                    Output.setCaretPosition(Output.getDocument().getLength());
                    //Output.revalidate();
                }
              });
        }
    qu'est ce qui cloche ?

    Merci,

    Nico
    Images attachées Images attachées  

  2. #2
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,



    On dirait que tu surcharges l'EDT... Comment tu appelles cette méthode ?

    a++

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    492
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 492
    Par défaut
    voilà ma boucle principale :

    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
    try {
                                outputForm output = new outputForm();
                                output.setVisible(true);
                                Process myProc = Runtime.getRuntime().exec(ini.getProperty("path", "appli") + "/" +                                                                     ini.getProperty("appliFolder", "out") + "/MNTbathy.bat");                            
                                InputStream is = myProc.getInputStream();
                                BufferedReader br = new BufferedReader(new InputStreamReader(is));
                                while ((reception = br.readLine()) != null) {                            
                                    output.addText(reception);
                                }
                                int codeRetour = myProc.waitFor();
                                myProc.destroy();                            
                            }
                            catch (IOException ex) {
                                System.err.println("DataSetChooser.DataSetChooser : " + ex.getMessage());
                            }
                            catch (InterruptedException ex) {
                                System.err.println("DataSetChooser.DataSetChooser : " + ex.getMessage());
                            }
    Nico

  4. #4
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Tu effectues bien cela en dehors de l'EDT ?
    Quel est la quantité de donnée que tu reçois ? Et à quel rythme ?

    a++

    Ps : ferme les flux d'erreur et d'entrée de ton process si tu ne les utilises pas : c'est plus sûr

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    492
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 492
    Par défaut
    >> Tu effectues bien cela en dehors de l'EDT ?
    c'est à dire ?

    >> Quel est la quantité de donnée que tu reçois ? Et à quel rythme ?
    c'est en continu, environ 4 à 5 affichages par seconde.
    je travaille avec netbeans, si j'affiche dans la fenetre debug, ou si au lieu de rediriger l'affichage, il se fait dans la fenetre de l'invite de commande, ça se passe bien.

    >>ferme les flux d'erreur et d'entrée de ton process si tu ne les utilises pas : c'est plus sûr
    comment faire ?

    Nico

  6. #6
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par DiverSIG Voir le message
    >> Tu effectues bien cela en dehors de l'EDT ?
    c'est à dire ?
    L'EDT correspond au thread d'affichage de Swing. Si tu effectues des traitements long ou bloquant dedans, tu empêches l'affichage de se mettre à jour et tu as ce genre de problème : il ne doit servir qu'à mettre à jour l'affichage.

    Pour vérifier si tu es dans l'EDT tu peux utiliser SwingUtilities.isEventDispatchThread().
    En général dans toutes les méthodes d'évenements tu es dans l'EDT...

    Citation Envoyé par DiverSIG Voir le message
    >>ferme les flux d'erreur et d'entrée de ton process si tu ne les utilises pas : c'est plus sûr
    comment faire ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    myProc.getErrorStream().close();
    myProc.getOutputStream().close();
    a++

Discussions similaires

  1. [JTextArea] problème de rafraichissement
    Par floanne dans le forum Composants
    Réponses: 5
    Dernier message: 25/02/2008, 15h46
  2. mauvais rafraichissement d'une JTextArea
    Par Nicool dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 13/11/2007, 14h26
  3. Probleme de rafraichissement d'un BDGrid
    Par marmotte dans le forum Bases de données
    Réponses: 10
    Dernier message: 28/05/2004, 18h07
  4. Toujours un problème de rafraichissement de DBGrid
    Par tripper.dim dans le forum C++Builder
    Réponses: 4
    Dernier message: 09/12/2002, 13h15
  5. Timage rafraichissment
    Par Rizzla dans le forum Composants VCL
    Réponses: 5
    Dernier message: 16/09/2002, 17h08

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