Hallo,
ich möchte eine Klasse schreiben, die es mir erlaubt einen PrintStream in einer TextArea auzugeben.
Genauer gesagt geht es drum die Konsolenausgabe umzuleiten. Wie ich System.out umleite weiss ich bereits.
Allerdings funktioniert mein Code nicht.
Die Klasse soll sich genau wie System.out handhaben lassen also zum Beispiel consoleoutput.out.println("Hello World"); sollte dann den String in der TextArea erscheinen lassen.
Ich wollte einen Thread erstellen, der einfach den Stream liest und dann ausgibt, aber das funktioniert nicht.
Das einzige was mir noch einfällt, ist von Printstream zu erben und alle Methoden selbst zu implementieren, aber das ist aufwendig.
Wie kann ich das bewerkstelligen?
mfg
Raptor
ich möchte eine Klasse schreiben, die es mir erlaubt einen PrintStream in einer TextArea auzugeben.
Genauer gesagt geht es drum die Konsolenausgabe umzuleiten. Wie ich System.out umleite weiss ich bereits.
Allerdings funktioniert mein Code nicht.
Die Klasse soll sich genau wie System.out handhaben lassen also zum Beispiel consoleoutput.out.println("Hello World"); sollte dann den String in der TextArea erscheinen lassen.
Ich wollte einen Thread erstellen, der einfach den Stream liest und dann ausgibt, aber das funktioniert nicht.
Das einzige was mir noch einfällt, ist von Printstream zu erben und alle Methoden selbst zu implementieren, aber das ist aufwendig.
Wie kann ich das bewerkstelligen?
mfg
Raptor
Code:
package toolbox.gui;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.PrintStream;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
public class JConsoleOutput extends JPanel implements Runnable {
/**
*
*/
private static final long serialVersionUID = 8376234470027268278L;
private JTextArea outputfield;
private ByteArrayOutputStream baos = new ByteArrayOutputStream();
public final PrintStream out;
private boolean stopflag;
public JConsoleOutput(int rows, int columns) throws IOException {
super();
outputfield = new JTextArea(rows, columns);
this.add(new JScrollPane(outputfield));
out = new PrintStream(baos);
new Thread(this).start();
}
public void stop() {
stopflag = true;
}
@Override
public void run() {
while (!stopflag) {
StringBuffer buffer = new StringBuffer();
buffer.append(new String(baos.toByteArray()));
buffer.append("\n");
outputfield.append(buffer.toString());
baos.reset();
}
}
public static void main(String[] args) {
JFrame frame = new JFrame("Test");
try {
JConsoleOutput cons = new JConsoleOutput(20, 60);
frame.add(cons);
frame.pack();
frame.setVisible(true);
for (int i = 0; i <= 20; i++) {
cons.out.println("Test is a test of my new Stream class " + i);
}
cons.stop();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}