Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Es ist zum verzweifeln, ich bekomme es nicht hin, dass die KOnsolenausgabe auf eine Textarea ausgegeben wird. Ich habe nun folgendes ausprobiert.

1.

 


public class ConsoleTestWindow extends JFrame 

{ 

  private static final long serialVersionUID = -6154572297336259192L; 


  /** Stream fuer Ausgabe */ 

  private ByteArrayOutputStream stream = new ByteArrayOutputStream(); 



  /** TextArea und Button fuer Formular */ 

  private JTextArea textArea; 

  private JButton button; 


  /** 

   * Innere Klasse zur Verwaltung der ActionListener 

   * beim Anklicken eines Buttons. 

   * 

   * @author NetPanther 

   */ 

  private class ButtonManager implements ActionListener 

  { 

     /** 

      * Auf Anklicken eines Buttons reagieren. 

      */ 

     public void actionPerformed(ActionEvent event) 

     { 

        Random rand = new Random(); 


        /** 

         * zufaellig Text ausgeben oder Exception werfen 

         */ 

        try 

        { 

           if (rand.nextBoolean()) 

           { 

              System.out.print("Test Ausgabe"); 

           } 

           else 

           { 

              throw new Exception("Fehler"); 

           } 

        } 

        catch (Exception e) 

       { 

           e.printStackTrace(); 

        } 





        /** Buffer erzeugen und Zeit + Meldung anhaengen*/ 

        StringBuffer buffer = new StringBuffer(); 


        buffer.append(new SimpleDateFormat("[HH:mm:ss]").format(new Date()) + ": "); 

        buffer.append(new String(stream.toByteArray()) + "\n"); 


        /** Buffer ausgeben und zuruecksetzen */ 

        textArea.append(buffer.toString()); 

        stream.reset(); 


     } 

  } 


  /** 

   * Konstruktor erzeugt ein Fenster mit einfacher 

   * Fehlerkonsolte und Button. 

   */ 

  public ConsoleTestWindow() 

  { 

     /** Fenster konfigurieren */ 

     super("Console");  

     JFrame.setDefaultLookAndFeelDecorated(true);  

     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  


     /** Formular erzeugen */ 

     this.createForm(); 

  } 


  /** 

   * Klickt man die Schaltflaeche an, wird 

   * zufaellig ein Text ueber System.out 

   * ausgegeben oder eine Exception ueber 

   * System.err geworfen. 

   */ 

  private void createForm() 

  { 

     /** Ausgabe auf Stream umbiegen */ 

     System.setOut(new PrintStream(stream)); 

     System.setErr(new PrintStream(stream)); 


     /** TextArea und Button erzeugen*/ 

     textArea = new JTextArea(); 

     button = new JButton("Ausgabe erzeugen");  


     /** ActionListener an den Button haengen */ 

     button.addActionListener(new ButtonManager()); 


     /** Krams ins Fenster einfuegen */ 

     this.add(button, BorderLayout.NORTH); 

     this.add(new JScrollPane(textArea), BorderLayout.CENTER); 

  } 

} 

2.
 


import java.awt.EventQueue; 


import javax.swing.JFrame; 


/** 

* Programmfenster erzeugen und Anwendung ausfuehren. 

* 

*/ 

public class StarterClass 

{ 

  /** 

   * JFrameShower zum Anzeigen des Swing Fensters. 

   * 

   */ 

  static class JFrameShower implements Runnable 

  { 

     final JFrame frame; 


     public JFrameShower(JFrame frame) 

     { 

        this.frame = frame; 

        EventQueue.invokeLater(this); 

     } 


     public void run() 

     { 

        frame.setLocation(300, 300); 

        frame.setSize(700, 350); 

        frame.setVisible(true); 

     } 

  } 


  /** 

   * Hauptprogramm erzeugt Fenster und zeigt dieses an. 

   * 

   * @param args Parameterliste 

   */ 

  public static void main(String[] args) 

  { 

     new JFrameShower(new ConsoleTestWindow()); 

  } 

} 


Dieses Beispiel ergibt nun folgendes Ergebnis:

[entfernt auf Wunsch des Erstellers by e@sy]

Vielen Dank schonmal für die Hilfe.....

Stefan

Geschrieben

Servus,

wieso bleibst Du nicht bei Deinen angefangenen Themen? Bald gehört die erste Seite im Java-Forum Deinen Konsolen-Threads.

Wo soll denn die von Dir gewünschte Ausgabe herkommen? Du startest Deine Anwendung, schreibst auf einen Buttonklick irgendwas auf SysOut und SysErr und das bekommst Du in Deiner TextArea. So soll es doch sein.

Beschreib Dein Problem mal genauer und poste den relevanten Quellcodeausschnitt, aus dem der Fehler hervorgeht (also der kleinste laufbare Codeausschnitt, mit dem das Problem nachgestellt werden kann, zur Not auch eine eigene Testklasse nur für diesen Zweck).

Peter

Geschrieben

Ja, sorry, ist der letzte forumeintrag über KOnsolen von mir ;)

Also es soll so ablaufen. Mein Programm wird gestartet. Z.B. der RFC-Handler. Nun bekomme ich folgende ausgabe auf die Konsole:

06-04 11:25:04 INFO - Testprogramm - RFCHandler started

wenn nun im weiteren verlauf etwas passiert, z.b. wird der rfc handler geschlossen, gibt es wieder eine meldung:

06-04 13:35:04 INFO - Testprogramm - RFCHandler closed

Diese Ausgaben möchte ich nun nicht mehr auf der KOnsole sondern in meine Textarea schreiben. D.h. ich drücke den button und er gibt mir fortlaufend die KOnsolenausgaben (wenn welche vorhanden sind).

Ich hoffe ich konnte das jetzt etwas einleuchtender erklären.

Folgender Quellcodeausschnitt ist hierbei relevant:


 private class ButtonManager implements ActionListener 

  { 

     /** 

      * Auf Anklicken eines Buttons reagieren. 

      */ 

     public void actionPerformed(ActionEvent event) 

     { 

        Random rand = new Random(); 


        /** 

         * zufaellig Text ausgeben oder Exception werfen 

         */ 

        try 

        { 

           if (rand.nextBoolean()) 

           { 

              System.out.print("Test Ausgabe"); 

           } 

           else 

           { 

              throw new Exception("Fehler"); 

           } 

        } 

        catch (Exception e) 

       { 

           e.printStackTrace(); 

        } 

Ich weiss leider nicht wie ich auf die konsole zugreifen kann, damit die meldungen auf der textarea ausgegeben werden?

Geschrieben

Wo liegt dein Problem? In den Antworten auf deine letzten Forumsbeiträge wurde dir doch bereits ein Lösungsvorschlag unterbreitet, den du schon selbst in Ansätzen verfolgt hast. Stichwort:

Hier mal ein Minimalbeispiel, dass dir die Funktionsweise deutlicher macht:


PipedOutputStream pos = new PipedOutputStream();

PipedInputStream pis = new PipedInputStream(pos);


PrintStream ps = new PrintStream(pos);


System.setOut(ps);

System.out.print("Hello World!");


byte[] buffer = new byte[pis.available()];

pis.read(buffer);	


String consoleString = new String(buffer);


// VM mit "-ea" Option starten

assert consoleString.equals("Hello World!");

Gruß

Geschrieben
Wo liegt dein Problem? In den Antworten auf deine letzten Forumsbeiträge wurde dir doch bereits ein Lösungsvorschlag unterbreitet, ...

nicht nur lösungsvorschlag, sondern lösung. perdi, the best oo-guru ;).

und ich verstehe nicht richtig was du willst... wenn du in deinem actionlistener eine exception wirfst,

else 

           { 

              throw new Exception("Fehler"); 

           } 

und die nicht abfängst, dann kommt halt sowas

......

bei raus.

bigredeyes

Geschrieben

wenn du in deinem actionlistener eine exception wirfst, [...] und die nicht abfängst, dann kommt halt sowas [...] bei raus.

bigredeyes

Er fängts ab. Gibts dann aber nur aus. Ist auch völlig legitim.


catch (Exception e) 

       { 

           e.printStackTrace(); 

        }

Die Lösung von Perdi ist wirklich eine sehr komfortable und in diesem Fall die Beste. Warum leicht, wenns auch schwer geht.

Gruß

Geschrieben

Servus,

ich kenn Deinen RFCHandler nicht, aber könnte mir denken, dass der auf die Standardausgabe loggt, bevor Du diese umbiegst. Wenn ja, dann hast Du Pech gehabt. Du fängst natürlich die Ausgaben auf SysOut und SysErr erst, wenn Du die auch umgebogen hast.

Peter

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...