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

Composants Java Discussion :

JTextArea, redirection du System.out


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 42
    Par défaut JTextArea, redirection du System.out
    Bonjour,

    J'ai crée un programme qui fonctionne en ligne de commande et j'ai récemment ajouté une interface graphique. Je ne voulais pas modifier le premier, j'ai donc cherché à rediriger les flux de sorties (System.out) vers un composant Swing en l'occurrence un JtextArea qui se prête bien à une sorte de console.

    J'ai donc crée une classe qui étend JtextArea et dans laquelle je redéfini la chose avec System.setOut....

    Cela marche ... mais c'est lent ! Lorsqu'un mode console, l'affichage de 1000 lignes est instantané, celui de ces même lignes en mode graphique est relativement lent (env 10s)

    J'ai beau diminuer les valeurs d'attente du thread, mettre le thread en haute priorité ... rienà faire => help

    Mon code

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
     
    import java.io.*;
    import javax.swing.*;
     
    public class JTextAreaConsole extends JTextArea implements Runnable {
     
        private Thread thread;
        private final PipedInputStream p_input = new PipedInputStream();
     
        public JTextAreaConsole() {
            super();
            redirectOut();
        }
     
        public JTextAreaConsole(int i, int j) {
            super(i,j);
            redirectOut();
        }
     
        private void redirectOut(){
            try {
                PipedOutputStream p_output = new PipedOutputStream(p_input);
                System.setOut(new PrintStream(p_output,true));
            } catch (Exception e) {
                append("STDOUT can't be displayed in the JTextAreaConsole Object\n"+e.getMessage());
            }
            thread = new Thread(this);
            thread.setDaemon(true);
            thread.start();
        }
     
        public synchronized void run() {
            while ( true ) {
                try {
                    wait(1);
                } catch (InterruptedException e) {
                    append("ERROR\n"+e.getMessage());
                }
                try {
                    if (p_input.available() != 0) {
                        append(read(p_input));
                        setCaretPosition(getDocument().getLength());
                    }
                } catch (IOException e) {
                    append("ERROR\n"+e.getMessage());
                }
            }
        }
     
        private String read(PipedInputStream p_input) throws IOException {
            int size = p_input.available();
            byte tab[] = new byte[size];
            p_input.read(tab);
            return new String(tab,0,tab.length);
        }
     
    }
    Merci d'avance

  2. #2
    Membre Expert
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Par défaut
    Pourquoi fais-tu un wait ? Ne pourrais-tu pas te mettre directement en lecture avec attente par read ?

    Sinon au lieu de créer des pipes tu pourrais rediriger directement le System.out vers le JTextArea en créant une sous-classe adaptée de OutputStream, que tu engloberas dans un PrintStream.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 42
    Par défaut
    Citation Envoyé par gifffftane Voir le message
    Pourquoi fais-tu un wait ? Ne pourrais-tu pas te mettre directement en lecture avec attente par read ?
    Sans le wait(), il y a une exception levée systématiquement

    Citation Envoyé par gifffftane Voir le message
    Sinon au lieu de créer des pipes tu pourrais rediriger directement le System.out vers le JTextArea en créant une sous-classe adaptée de OutputStream, que tu engloberas dans un PrintStream.
    Ha oui, j'avais trouvé un topic sur une board anglaise qui parlait du PipedInputStream, mais si c'est possible avec un simple OutputStream ....

    Je vais regarder de ce coté là

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 42
    Par défaut
    L'idée de la classe OutputStream m'a fait atterrir directement sur une source du site => http://java.developpez.com/sources/?...eamToJTextArea

    Merci

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

Discussions similaires

  1. [Swing JTextArea System.out] Comportement de console
    Par DjGonk dans le forum AWT/Swing
    Réponses: 8
    Dernier message: 30/08/2012, 15h53
  2. Rediriger System.out dans un JTextArea ?
    Par ThePhenom dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 24/09/2007, 13h51
  3. Redirection du System.out vers JEditorPane
    Par inest dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 07/05/2007, 16h41
  4. Redirection System.out + JScrollPane toujours en bas
    Par g0ldenrno dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 03/07/2006, 16h35
  5. Rediriger le System.out vers un JTextPane/JtextArea
    Par cw_nico dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 09/04/2006, 15h41

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