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

Langage Java Discussion :

Sortie console vers GUI


Sujet :

Langage Java

Vue hybride

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

    Informations forums :
    Inscription : Septembre 2006
    Messages : 287
    Par défaut Sortie console vers GUI
    Bonjour à tous,

    Je souhaiterai récuperer les flux de sortie et d'erreur de la console afin de les afficher dans une interface.
    Etant donné que cette sortie doit aussi se faire dans un fichier texte, j'ai récupéré la class créé par AdiGuba dans ce topic. J'aimerais donc savoir s'il serait possible d'ajouter un JtextArea à cette sortie de flux, et si oui, comment le faire .

    Merci beaucoup.

  2. #2
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Oui, c'est possible.
    Tu peux créer un objet qui est un OutputStream, et qui contient un JTextArea. L'objet sera à ajouter à la liste des flux gérés par le multi-outputstream.
    Exemple de squelette :
    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
    public class TextAreaOutputStream implements OutputStream
    {
      private JTextArea area;
     
      public TextAreaOutputStream( JTextArea area )
      {
        this.area = area;
      }
     
      @Override
      public void close() throws IOException {}
      @Override
      public void flush() throws IOException {}
     
      @Override
      public void write(byte[] b, int off, int len) throws IOException
      {
        area.append( new String( b, off, len ) );
      }
     
      @Override
      public void write(byte[] b) throws IOException
      {
        area.append( new String( b );
      }
     
      @Override
      public void write(int b) throws IOException
      {
        area.append( (char)b );
      }
    }
    Il reste bien sûr à :
    1. traiter l'encodage du flux (ça peut être un paramètre du constructeur)
    2. ajouter un booléen pour savoir si on ajoute automatiquement un retour à la ligne à chaque append
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    287
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 287
    Par défaut
    Bonjour,

    Merci pour ta réponse, jour férié oblige je ne l'ai vu qu'aujourd'hui .

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    287
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 287
    Par défaut
    Rebonjour

    Petit soucis, l'affichage ne se fait pas en même temps, il ne se fait qu'une fois le traitement terminé.

    Ue petite idée de comment corriger cela?

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 252
    Par défaut
    Plutôt que d'utiliser un OutputStream, utilise un PrintStream tout en le modifiant pour flusher après chaque println();

    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
    public class TextAreaOutputStream extends java.io.PrintStream {
      private final JTextArea area;
     
      public TextAreaOutputStream (JTextArea area) {
        if (area == null) throw new NullPointerException("area is null");
        this.area = area;
      }
     
      @Override
      public void println() {
        super.println();
        flush();
      }
     
      @Override
      public void write(byte[] b, int off, int len) throws IOException
      {
        area.append( new String( b, off, len ) );
      }
     
      @Override
      public void write(byte[] b) throws IOException
      {
        area.append( new String( b );
      }
     
      @Override
      public void write(int b) throws IOException
      {
        area.append( (char)b );
      }
     
    }

  6. #6
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Citation Envoyé par Micke7 Voir le message
    Rebonjour

    Petit soucis, l'affichage ne se fait pas en même temps, il ne se fait qu'une fois le traitement terminé.

    Ue petite idée de comment corriger cela?
    Tu fais ton traitement directement dans un listener d'un composant graphique ?
    Il faut faire le traitement dans un Thread séparé.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    287
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 287
    Par défaut
    Les Thread je n'ai pas encore vraiment utilisé, donc je vais tester l'autre soluce (mais promis je m'y met bientôt )

    dingoth, j'ai testé ton code mais 2 erreurs persistent :
    la première sur le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public TextAreaOutputStream(JTextArea area)
    avec comme erreur : Implicit super constructor PrintStream() is undefined. Must explicitly invoke another constructor

    et la seconde sur le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    area.append( (char)b );
    (dernier append) avec cette foispour erreur : The method append(String) in the type JTextArea is not applicable for the arguments (char).

    Une idée?


    [EDIT]D'ailleurs, autre petit soucis, tout ce qui concerne les erreurs(types exceptions) n'est pas loggué, affiché. Assez embétant...

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 27/06/2012, 13h49
  2. [Batch] Rediriger sortie console vers fichier malgré plusieurs call?
    Par takinelinfo dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 01/12/2011, 17h02
  3. Réponses: 2
    Dernier message: 13/11/2009, 17h02
  4. Redirection sortie JBoss vers console
    Par Mister Nono dans le forum Wildfly/JBoss
    Réponses: 4
    Dernier message: 23/12/2008, 18h37
  5. Réponses: 2
    Dernier message: 30/10/2007, 17h41

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