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 :

Redirection du flux de sortie


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
    Mars 2009
    Messages
    389
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2009
    Messages : 389
    Par défaut Redirection du flux de sortie
    Bonjour,
    actuellement, les logs de connexion ftp de mon application sont dirigées dans la console (avec System.out.println() ).

    Je voudrai, dans un premier temps, rediriger tout le texte dans un JTextField.
    Ensuite, je le redirigerai dans un fichier de log, mais pour l'instant, j'ai besoin d'afficher ces résultats directement sur l'application, et plus dans la console.

    Comment m'y prendre?

    Merci.

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 277
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 277
    Par défaut
    Tu peux utiliser la méthode setText de ton JTextField.
    Si tu as beaucoup de log, utilise un JTextArea ou un autre composant texte.

    Tu peux, en plus, utiliser une API de logs comme Log4j qui te facilitera l'écriture dans des fichiers.

  3. #3
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    je rajouterais que si tu ne veux pas modifier ton code (le System.out.println()) dans un premier temps, tu peux faire un System.setOut() auquel tu passe ta propre implémentation de outputstream.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    389
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2009
    Messages : 389
    Par défaut
    Merci pour vos conseils

    Je vais plutot mettre ça dans un JTextAera effectivement, ça sera plus lisible.

    Concernant l'implémentation de outpustream, je dois organiser ça comment? Un peu de la même façon que lorsqu'on implémente la méthode toString(), ou c'est différent?

  5. #5
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    tu implémente les méthode de l'interface.

  6. #6
    Membre Expert
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Par défaut
    une idée en passant (jai jamais fait mais dans ce cas ça me démangerait)
    faire un PipedInputStream dans un Thread qui lit le PipedOutputStream alimenté par SetOut.
    en faisant un joli petit code qui peut soit afficher quelque part (TexField par ex.) soit repasser une patate chaude au système de log (ne pas réécrer l'infrastructure de log!).

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    389
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2009
    Messages : 389
    Par défaut
    En suivant vos conseils, j'ai remplacé les System.out.println() par des JTextArea.appen().

    Le texte s'affiche bien dans le textarea, mais le souci, c'est que l'application attend de charger tout le texte avant l'affichage.
    Ce que je voudrai, c'est que le texte d'affiche en temps réel, de la même façon que dans la console.

    Est-ce possible?

    Merci

  8. #8
    Membre Expert
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Par défaut
    C'est pour cela que j'ai conseillé un Thread d'affichage distinct qui consomme les println "poussé" par un autre Thread... (PipedStream ne vous plait pas?)

  9. #9
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    Citation Envoyé par floctc Voir le message
    le souci, c'est que l'application attend de charger tout le texte avant l'affichage.
    1) tu ne dois pas faire ton travail principal (celui qui au final génère des messages de logs) dans le EDT, sinon tu givre ton affichage pendant l'opération
    2) tu dois faire les mises à jour du jtextare (appel à append) dans l'EDT, via des appel à swingworker par exemple


    En conclusion, ton code d'affichage devrais ressembler à ca

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public void append(String text){
        SwingUtilities.invokeLater(new Runnable(){
            String message=text;
            public void run(){
              textarea.append(message);
            }
        }
    }

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

Discussions similaires

  1. Redirection d'un flux de sortie system vers widget text
    Par bennyben87 dans le forum Interfaces Graphiques
    Réponses: 21
    Dernier message: 26/05/2010, 09h35
  2. Awk - changer le flux de sortie
    Par Longrais dans le forum Linux
    Réponses: 1
    Dernier message: 16/08/2005, 18h11
  3. [reseaux] redirection de flux
    Par Olive1808 dans le forum Programmation et administration système
    Réponses: 2
    Dernier message: 12/08/2002, 10h24

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