Hallo,
Zuersteinmal sorry falls das schonmal irgendwo besprochenwurde, aber bei den Stichwörtern "Konsole" oder "Konsolenausgabe" erhalte ich "millionen" Treffer die überhauptnix mit meinem Problem zu tun haben.
Das Problem:
Ich möchte in meinem Java-Programm eine Art Konsole haben, dort werden einige Meldungen des Programms ausgegeben aber (einstellbar durch den User) auch System.out und/oder System.err auf diese "interne" Konsole umgeleitet.
Das umleiten mache ich so:
Meine Konsole ist ein JLabel welches sich in einem JScrollPane befindet.
Das Problem ist das die Ausgabe sehr langsam ist, wenn eine Exception auftritt und auf der Konsole ausgegeben wird kann man fast zuschauen wie jeder einzelne Buchstabe erscheint (ca.10 Buchstaben pro Sekunde).
Das Problem liegt wohl darin das
a) ich immer mit setText() den kompletten Text des JLabels ersetze und
b) bei Exceptions jedes Zeichen einzeln geschrieben wird statt alles "in einem Rutsch" zu schreiben
Ich habs jetzt noch nicht ausprobiert, aber je länger der Text in der Konsole wirde desto schlimmer müsste es ja werden...
Da gibts doch sicher eine bessere (schnellere) Lösung, oder?
mfg
Christian
Zuersteinmal sorry falls das schonmal irgendwo besprochenwurde, aber bei den Stichwörtern "Konsole" oder "Konsolenausgabe" erhalte ich "millionen" Treffer die überhauptnix mit meinem Problem zu tun haben.
Das Problem:
Ich möchte in meinem Java-Programm eine Art Konsole haben, dort werden einige Meldungen des Programms ausgegeben aber (einstellbar durch den User) auch System.out und/oder System.err auf diese "interne" Konsole umgeleitet.
Das umleiten mache ich so:
Code:
System.setErr(new ErrorPrintStream(statusLogLabel));
...
private class ErrorPrintStream extends PrintStream{
public ErrorPrintStream(JLabel errorLog){
super(new ErrorOutputStream(errorLog));
}
}
private class ErrorOutputStream extends OutputStream {
private JLabel errorLog;
public ErrorOutputStream(JLabel errorLog) {
this.errorLog=errorLog;
}
public void write(int b){
char c=(char)b;
if (String.valueOf(c).equals("\n")){
errorLog.setText(errorLog.getText() + "
");
} else {
errorLog.setText(errorLog.getText() + String.valueOf(c));
}
}
}
Meine Konsole ist ein JLabel welches sich in einem JScrollPane befindet.
Das Problem ist das die Ausgabe sehr langsam ist, wenn eine Exception auftritt und auf der Konsole ausgegeben wird kann man fast zuschauen wie jeder einzelne Buchstabe erscheint (ca.10 Buchstaben pro Sekunde).
Das Problem liegt wohl darin das
a) ich immer mit setText() den kompletten Text des JLabels ersetze und
b) bei Exceptions jedes Zeichen einzeln geschrieben wird statt alles "in einem Rutsch" zu schreiben
Ich habs jetzt noch nicht ausprobiert, aber je länger der Text in der Konsole wirde desto schlimmer müsste es ja werden...
Da gibts doch sicher eine bessere (schnellere) Lösung, oder?
mfg
Christian