afficher smplment le contenu de la cnsole et la sortie d'autre scripts

afficher smplment le contenu de la cnsole et la sortie d'autre scripts - Java - Programmation

Marsh Posté le 14-02-2004 à 00:40:57    

bonjour...
 
Je cherche a afficher des informations pour faciliter l'usage de mes scripts sous forme de .jar : sans l'usage de mon editeur (eclipse) Je voudrais donc afficher simplement d'une part la console dans une fenetre lambda supplémentaire a mon interface graphique existe t'il une classe dans l'API java 1.4.1?
 
et d'autre part la sortie des programmes externes auxquels je fais appel dans mon script.
 
Cette classe devrait afficher une fenetre contenant la sortie d'un de mes deux programmes que l'on passe sous forme de BufferedReader.
 

Code :
  1. /*
  2. * Created on 2004-02-09
  3. *
  4. * To change the template for this generated file go to
  5. * Window>Preferences>Java>Code Generation>Code and Comments
  6. */
  7. package InterfaceGraphique;
  8. import java.io.*;
  9. import java.awt.*;
  10. import javax.swing.*;
  11. /**
  12. * @author Olivier
  13. *
  14. * Ouvre une fenetre dans laquelle on va afficher le bufferedReader entré
  15. *
  16. */
  17. public class FenetreSortieConsole extends JDialog {
  18. FenetreSortieConsole(BufferedReader br, String titre) throws IOException {
  19.  setSize(400,400);
  20.  setTitle(titre);
  21.  setDefaultCloseOperation(DISPOSE_ON_CLOSE);
  22.  JTextArea sortieBlast = new JTextArea() ;
  23.  JScrollPane areaScrollPane = new JScrollPane(sortieBlast);
  24.  //areaScrollPane.setBackground(COULEUR) ;
  25.  areaScrollPane.setVerticalScrollBarPolicy(
  26.      JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
  27.  areaScrollPane.setPreferredSize(new Dimension(400, 200));
  28.  areaScrollPane.setBorder(BorderFactory.createTitledBorder(titre));
  29.  String line = br.readLine() ;
  30.  while (line != null) {
  31.   sortieBlast.append(line) ;
  32.   line = br.readLine() ;
  33.  }
  34.  Container panneau = getContentPane();
  35.  panneau.add(areaScrollPane) ;
  36. }
  37. }


 
Or cela ne fonctionen pas la fentetre reste vide apres avoir ete créee et que le contenu du bufferedREader passé en paramètre aie été par ailleurs affiché dans la console avec le code suivant (extrait) :
 

Code :
  1. if(cap3){
  2.       commandeCAP3 = ExtractionsDiverses.CreerCommande(valeurCommande1, cheminSaveSeq3) ;
  3.       System.out.println("commande cap 3 :" + commandeCAP3) ;
  4.       Process process2 = runtime.exec(commandeCAP3);
  5.       // récupération de la sortie console de CAP3        
  6.       BufferedReader b2 = new BufferedReader (new InputStreamReader(process2.getInputStream())) ;
  7.       String line2 = b2.readLine() ;
  8.       // afficher la sortie console             
  9.       while (line2!=null) {               
  10.                
  11.        System.out.println(line2) ;
  12.            
  13.        line2 = b2.readLine() ;
  14.            
  15.       }
  16.       // ouvre une fenetre contenant la sortie console Cap3
  17.       FenetreSortieConsole fr2 = new FenetreSortieConsole(b2, SORTIE_CAP3);
  18.       fr2.show();
  19.       process2.waitFor();
  20.                                      
  21.      }


 
 
voilà, merci
 
Olivier

Reply

Marsh Posté le 14-02-2004 à 00:40:57   

Reply

Marsh Posté le 14-02-2004 à 20:30:34    

Ben les gars c'est quoi qui vous laisse coi a propos de mon message il y a des trucs pas clairs?
 
Dans l'une des deux questions?
 
a+
 
Olivier

Reply

Marsh Posté le 17-02-2004 à 19:08:34    

Voici pour rediriger la console dans une fenetre (simplifié).
 

Code :
  1. public class ConsoleFrame extends java.io.OutputStream {
  2. JTextArea text;
  3. Frame f;
  4. public ConsoleFrame() {
  5.     f = new Frame("console" );
  6.     text = new TextArea();
  7. }
  8. public void write(byte[] b) {
  9.     write(b, 0, b.length);
  10. }
  11. public void write(byte[] b, int off, int len) {
  12.     text.setText(text.getText() + new String(b, off, len));
  13. }
  14. public void write(int b) {
  15.     text.setText(text.getText() + Integer.toString(b));
  16. }
  17. }


 
et dans ton programme principal tu fais :

Code :
  1. System.setOut(new PrintStream(new ConsoleFrame()));


 
J'espere qu'il n'y a pas d'erreur (je l'ai tapé vite fait) et que c'est ca que tu demandais.


Message édité par yo c spi le 17-02-2004 à 20:05:41
Reply

Marsh Posté le 18-02-2004 à 21:02:14    

bon bien ca marche pas terrible le code en question : ca ne fait absolument rien et mon programme ne fini jamais...
 
ou dans le programme principal faut il mettre la ligne de code?
 
voici le code corrigé par moi j'ai changé le frame en Jframe mais je ne sais pas si il fallait le faire (car ça n'a rien changé)...
 

Code :
  1. public class ConsoleFrame extends java.io.OutputStream {
  2.  JTextArea text;
  3.  JFrame f;
  4.    
  5.  public ConsoleFrame() {
  6.   f = new JFrame("console" );
  7.   text = new JTextArea();
  8.  }
  9.    
  10.  public void write(byte[] b) {
  11.   write(b, 0, b.length);
  12.  }
  13.    
  14.  public void write(byte[] b, int off, int len) {
  15.   text.setText(text.getText() + new String(b, off, len));
  16.  }
  17.    
  18.  public void write(int b) {
  19.   text.setText(text.getText() + Integer.toString(b));
  20.  }
  21.    
  22. }


 
voila
 
merci

Reply

Marsh Posté le 18-02-2004 à 21:04:44    

roievil a écrit :

bon bien ca marche pas terrible le code en question : ca ne fait absolument rien et mon programme ne fini jamais...


 
[:mlc]

Reply

Marsh Posté le 19-02-2004 à 17:55:11    

Il est vrai que j'ai fait des erreurs dans mon code (je l'ai fait de tet a partir d'un code que j'avais déjà fait), déjà le mélange AWT-SWING, c'était pas top.
 
Voila un code qui marche (je l'utilise).
 

Code :
  1. import javax.swing.*;
  2. import java.io.OutputStream;
  3. public class ErrorFrame extends JFrame {
  4.     JTextArea text;
  5.    
  6.     public ErrorFrame() {
  7.         super("Debug" );
  8.         text = new JTextArea();
  9.         text.setEditable(false);
  10.         text.setOpaque(false);
  11.         JScrollPane scroll = new JScrollPane(text);
  12.         scroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
  13.         scroll.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
  14.        
  15.         getContentPane().add(scroll);
  16.        
  17.         pack();
  18.     }
  19.    
  20.     public OutputStream getOutputStream() {
  21.         return new OutputStream() {
  22.             public void write(byte[] b) {
  23.                 text.setText(text.getText() + new String(b));
  24.             }
  25.    
  26.             public void write(byte[] b, int off, int len) {
  27.                 text.setText(text.getText() + new String(b, off, len));
  28.             }
  29.            
  30.             public void write(int b) throws java.io.IOException {
  31.                 System.out.println("write(int b) appelée" );
  32.             }
  33.         };
  34.     }
  35. }


 
et dans le code principal, tu le places au début de ta classe :

Code :
  1. ErrorFrame errorFrame = new ErrorFrame();
  2. System.setOut( new PrintStream( errorFrame.getOutputStream(), true));

Reply

Marsh Posté le 19-02-2004 à 18:22:57    

sympa... :jap:


---------------
IVG en france
Reply

Marsh Posté le 21-02-2004 à 00:04:29    

c'est bien beau merci pour la classe
 
Autre chose : comment faire pour que l'affichage soit en direct et qu'il ne faille pas attendre la fin de tout le programme?
 
est ce une histoire de repaint?  
 
a+

Reply

Marsh Posté le 21-02-2004 à 17:59:13    


 
http://jchatirc.sf.net/veryfree/veryfree_plusun.gif

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed