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

AWT/Swing Java Discussion :

[Stratégie] Afficher la sortie console dans mon programme


Sujet :

AWT/Swing Java

  1. #1
    Membre du Club
    Inscrit en
    Janvier 2005
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 79
    Points : 43
    Points
    43
    Par défaut [Stratégie] Afficher la sortie console dans mon programme
    bonjour,

    j'aimerais creer une fenetre graphique affichant le contenu de la sortie standard et la sortie erreur, en gros l'equivalent de la console dans Eclipse.

    A priori le seul probleme que je rencontre consiste a afficher le contenu de la sortie erreur avec les exceptions.

    Savez vous comment y parvenir ?

    merci !

  2. #2
    Membre averti
    Inscrit en
    Avril 2004
    Messages
    503
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 503
    Points : 445
    Points
    445
    Par défaut Re: [swing] console
    Citation Envoyé par frouge

    A priori le seul probleme que je rencontre consiste a afficher le contenu de la sortie erreur avec les exceptions.
    En utilisant des blocs Try Catch il suffit d'implémenter une methode appelée dans le catch qui t'affiche l'erreur dans un JTextArea par exemple...
    :

  3. #3
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 860
    Points : 22 900
    Points
    22 900
    Billets dans le blog
    51
    Par défaut
    Cree-toi une classe singleton et/ou non-instanciable genre ConsoleOutput qui contient 2 flux public finaux out et err. Quand qqchose est ecrit dans l'un des flux tu peux ecrire le contenu dans un TextArea, un fichier, une socket, les flux de sortie standard habituels................................................... bref ce que tu veux.

    Edit - pour faire plus avance tu peux juste de base te contenter d'ecrire sur les flux standard et donner la possibilite d'ajouter des ConsoleOutputListener/Observer/Monitor sur ton singleton histoire de pouvoir faire des sorties specifiques et/ou multiples.

    Un truc du genre :

    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
     
    public final class ConsoleOutput {
      public static final PrintStream out = new ConsolePrintStream(System.out, false);
      public static final PrintStream err = new ConsolePrintStream(System.err, true);
      ...
      private static List<ConsoleOutputObserver> obsList = new LinkedList();
     
      private static void notifyMessageReceived(String text) {
        for (ConsoleOutputObserver  obs : obsList) {
          try {
            obs.messageReceived(text);
          }
          catch (Exception e) {
            e.printStackTrace();
          }
        }
      }
     
      ...
     
      private static class ConsolePrintStream extends PrintStream {
        private boolean isErrorStream;
        public ConsolePrintStream(PrintStream defaultStream, boolean isErrorStream) {
          super(defaultStream);
          this.isErrorStream = isErrorStream;
        }
     
        public void println(String text) {
          super.println(text);
          notifyNewOutput(text);
        }
     
       ...
     
        private void notifyNewOutput(String text) {
          if (isErrorStream) {
            notifyErrorReceived(text);
          }
          else {
            notifyMessageReceived(text);
          }
        }
      }
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public interface ConsoleOutputObserver {
     
      public void errorReceived(String message);
     
      public void messageReceived(String message);
     
    }


    Puis dans ton code remplace tous tes System.out par des ConsoleOutput.out (meme chose pour err).

    Edit - attention cependant a la synchronisation quand tu ecriras les sorties pour eviter les meli-melo au niveau de l'affichage (ex: si plusieurs threads utilisent ConsoleOutput.out.println en meme temps). A voir si c'est mieux de synchroniser a la source (chaque methode println de chacun des 2 flux) ou juste a l'affichage (le code de chaque observateur concret).

    Woala.

  4. #4
    Membre du Club
    Inscrit en
    Janvier 2005
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 79
    Points : 43
    Points
    43
    Par défaut
    merci pour vos conseils.

    Une autre question. Est-il possible de modifier la couleur des chaines de caractere dans un jtextarea?

  5. #5
    Membre à l'essai
    Inscrit en
    Août 2005
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 19
    Points : 22
    Points
    22
    Par défaut
    Tu devrais trouver ton bonheur dans la methode : setForeground(Color arg)

  6. #6
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 860
    Points : 22 900
    Points
    22 900
    Billets dans le blog
    51
    Par défaut
    setForeground(Color arg)
    Ca marche bien mais ca changera tout le texte à la même couleur.

    Tu peux aussi utiliser un JEditorPane pour l'affichage et utiliser du code HTML pour avoir des lignes de différentes couleurs. Par contre le traitement de modif du document affiché est évidement un poil plus complexe. JTextPane devrait également te permettre de créer des doc avec des lignes de style varié (couleur, font, italic, .....).

  7. #7
    Membre à l'essai
    Inscrit en
    Août 2005
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 19
    Points : 22
    Points
    22
    Par défaut
    Ah oui c'est mieux comme ca, je n'avais pas compris la question .

  8. #8
    Membre du Club
    Inscrit en
    Janvier 2005
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 79
    Points : 43
    Points
    43
    Par défaut
    ok thanks

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

Discussions similaires

  1. [Débutant] Console, plusieurs problèmes dans mon programme
    Par Maaarion.m dans le forum C#
    Réponses: 3
    Dernier message: 17/02/2012, 19h24
  2. Réponses: 5
    Dernier message: 18/12/2009, 09h40
  3. Integrer une musique dans mon programme
    Par Tutux84 dans le forum C
    Réponses: 2
    Dernier message: 29/01/2005, 12h41
  4. [Lien]erreur dans mon programme python
    Par durnambule dans le forum Général Python
    Réponses: 11
    Dernier message: 29/01/2004, 14h59
  5. [] Utiliser AVI d'une DLL dans mon programme
    Par seb.49 dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 02/05/2003, 14h52

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