Se connecter avec
S'enregistrer | Connectez-vous

Résolu Redirection console Java

Solutions (14)
Tags :
  • Programme
  • Programmation
|
Bonjour!

J'aimerais pour mon programme Java 1.5, me reconstituer ma propre console.
L'application étant exportée en exécutable, lorsque je l'utilise il n'y a pas la console d'éclipse.

Par défaut, dans les options de l'outil exe4java (qui compile le .exe), les System.err.println() et System.out.println() sont redirigés dans output.log et error.log, à la racine de mon application.

J'aimerais -tout en gardant cela- "copier" tout ce qui passe dans ces 2 flux, pour les afficher au besoin dans une fenêtre disposant d'un JTextArea, donc récupérer en String l'intégralité de tout ce qui transite dans les PrintStreams, en temps-réel.

Je n'arrive pas à faire cela, à chaque fois c'est soit l'un, soit l'autre.

Si quelqu'un a une idée..


Note : J'aimerais éviter l'option de relire les fichiers log pour les intégrer au JTextArea, puisque quand je développe ces derniers n'existent pas.


Merci d'avance,
Minimus.
  • Demander des précisions |
  • Alerter
Contenus similaires
Meilleure solution
partage
|
Bonjour,

Si j'ai bien compris, tu souhaites "doubler" les flux de sortie et d'erreur.
Ainsi :
System.out renvoie vers la console ET ton JTextArea
(de même pour System.err)

On a pas trop le choix, il faut ruser :whistle: 

L'astuce serait de propager à des écouteurs ce que tu envoies dans les sorties standards et erreurs.

Concrètement, il faut définir un "PrintStream" (class ... extends PrintStream) qui prendra en paramètre System.out ou System.err, et surcharger toutes les méthodes "write" pour propager le message à tous les écouteurs (qui ont une méthode incomingOutputMessage(String s) ...)

Dans l'interface où on met le textarea sensé gérer le flux, on s'abonne à l'objet créé en static dans le main. Du coup, dans la méthode "incoming..." je peux donc "ajouter" au textarea ce que je reçois.

C'est tout bête, et peu gourmand !

Je te mets en lien un projet eclipse complet qui test mes propos : ICI (une petite archive ZIP avec tout ce qu'il te faut < clic)

L'avantage, c'est qu'une fois qu'on a "setter" nos sorties (System.setOut, System.setErr), tout est récupéré, même les exceptions etc.

J'espère que ça va t'aider !

PS: les captures d'écran ne sont pas à jour, j'ai ajouté une coloration "rouge" pour le contenu du "JTextArea" d'erreur, et des "JScrollPane" pour gérer les "JTextArea".
En tout cas, ça marche bien, je garde ça de côté, ça pourra m'être utile ;) 
  • RedSux a édité ce message
  • Alerter
  • Commenter cette solution |
Score
0
òh
òi
|
Merci, de même !

Minimus.
  • Alerter
  • Commenter cette réponse |
Score
0
òh
òi
|
Ok, bonne continuation ;) 
  • Alerter
  • Commenter cette réponse |
Score
0
òh
òi
|
Ben le Look'n'Feel que j'utilise est le Liquid, et jusqu'ici il n'a jamais posé de problème. Je l'ai choisi en fonction car justement, après en avoir testé beaucoup, tous présentaient des bugs plus ou moins gênants, celui-là aucun. J'ai testé une Frame de test, incluant onglets, splipane, scrollpane etc... et aucun problème!

C'est étonnant. Je suis sous Windows et Java 1.5, donc le LAF Nimbus n'est pas pour moi. Et pour des raisons de stabilité je peux pas updater la version de mon jre.

Etrange, mais pas gênant puisque je vais modifier la JFrame, je n'aurais plus ces onglets.
  • Alerter
  • Commenter cette réponse |
Score
0
òh
òi
|
En fait, l'avantage de mon projet c'est qu'il est possible de faire un Jar du tout, et de l'utiliser ailleurs.

Garder les class MainApp et MainGui permet simplement de tester la librairie.

Donc pas besoin de sortir les fichiers etc. Tu exportes un jar du tout, ça suffira.

Par contre, je me demande bien ce que tu as fais pour ne pas pouvoir ouvrir les onglets ... J'ai réalisé ça sur mon Mac, j'ai testé au boulot sous Linux et Windows, et je n'ai aucun soucis ... T'as du rajouter un truc quelque part, un LookAndFeel peut être ?

Edit :
Minimus a dit :
Edit : C'est peut-être du au Look'n'Feel de mon projet, je vais creuser de ce côté, juste pour savoir.


Ben voila la réponse, c'est surement dû à ça. Fait attention aux Look'n'Feel custom, je te conseil de ne pas en faire l'usage. Reste sur ceux par défaut, surtout que le dernier en date (Nimbus) est pas trop mal.

Et si vraiment tu veux un truc bien intégré au Système, fait du SWT, et non du Swing.
  • Alerter
  • Commenter cette réponse |
Score
0
òh
òi
|
J'y songe en effet, en revanche je suis en train de chercher comment faire un jar de quelques fichiers sans générer un projet à part entière... Si je zippe le tout et que je renomme en .jar ça ne fonctionnera probablement pas... mais c'est une question futile.

J'ai rajouté un onglet dans le JTabbedPane, et rien n'y fait, je ne peux ps changer la vue..

Si je définit dans le code this.bottomPane.setSelectedIndex(1) je vais voir l'onglet Erreur mais ne peux pas cliquer sur les autres..

J'ai tenté de forcer le setEnabled(true), rien n'y fait..


De toutes façons, je vais remanier la fenêtre à mes besoins, à savoir afficher les 2 TextArea en même temps, dans la même fenêtre.

Vraiment mille mercis :-)


Edit : C'est peut-être du au Look'n'Feel de mon projet, je vais creuser de ce côté, juste pour savoir.
  • Alerter
  • Commenter cette réponse |
Score
0
òh
òi
|
Minimus a dit :
Mis à part que je ne peux pas cliquer sur l'onglet "Erreur" pour afficher le textArea d'erreur...


Sinon, c'est étrange ça ... J'ai pas de problème perso !

Tu devrais pouvoir facilement adapter ça pour ton code, à la limite, fait en un jar (non excutable) et sers-t'en comme librairie.
  • Alerter
  • Commenter cette réponse |
Score
0
òh
òi
|
^^ Pas de problème!
  • Alerter
  • Commenter cette réponse |
Score
0
òh
òi
|
Comme t'es heureux, je me permets ;) 
n
nMeilleure réponse sélectionnée par RedSux.
  • Alerter
  • Commenter cette réponse |
Score
0
òh
òi
|
Eh bien ça marche du tonnerre!

Mis à part que je ne peux pas cliquer sur l'onglet "Erreur" pour afficher le textArea d'erreur...

Mais c'est certainement un détail que je devrais réussir à résoudre.

Merci beaucoup, c'est vraiment ce que je cherchais à faire. Bravo!!

Minimus.
  • Alerter
  • Commenter cette réponse |
Score
0
òh
òi
|
Minimus a dit :
:)  Je n'en attendais pas tant !!


Je n'ai pas l'habitude de donner tant également. Mais le sujet m'a inspiré.
  • Alerter
  • Commenter cette réponse |
Score
0
òh
òi
|
:)  Je n'en attendais pas tant !!

Je teste ça de suite!
  • Alerter
  • Commenter cette réponse |
Score
0
òh
òi
|
Pourrais-tu être plus précis s'il te plait ?
  • Alerter
  • Commenter cette réponse |
Score
0
òh
òi
|
Redirige les 2 flux dans des flus de buffer.
  • Alerter
  • Commenter cette réponse |

Ce n'est pas ce que vous cherchiez ?

Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS