steve77 Geschrieben 4. Juni 2008 Geschrieben 4. Juni 2008 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 Zitieren
kingofbrain Geschrieben 4. Juni 2008 Geschrieben 4. Juni 2008 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 Zitieren
steve77 Geschrieben 4. Juni 2008 Autor Geschrieben 4. Juni 2008 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? Zitieren
kein-tee Geschrieben 4. Juni 2008 Geschrieben 4. Juni 2008 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: PipedInputStream zum Lesen der KonsolenausgabenPipedOutputStream zum Verknüpfen mit System.out und PipedInputStreamSystem.setOut() damit in den PipedOutputStream geschrieben wird 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ß Zitieren
bigredeyes Geschrieben 4. Juni 2008 Geschrieben 4. Juni 2008 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 Zitieren
kein-tee Geschrieben 4. Juni 2008 Geschrieben 4. Juni 2008 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ß Zitieren
kingofbrain Geschrieben 4. Juni 2008 Geschrieben 4. Juni 2008 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 Zitieren
Empfohlene Beiträge
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.