import java.awt.*;
import java.awt.event.*;
import java.io.*;
public
class RedirectedFrame
extends Frame {
TextArea aTextArea =
new TextArea();
PrintStream aPrintStream =
new PrintStream(
new FilteredStream(
new ByteArrayOutputStream()));
boolean logFile;
RedirectedFrame(
boolean logFile) {
this.logFile = logFile;
System.setOut(aPrintStream);
System.setErr(aPrintStream);
setTitle(
"Error message");
setSize(500,300);
setLayout(
new BorderLayout());
add(
"Center" , aTextArea);
displayLog();
addWindowListener
(
new WindowAdapter() {
public
void windowClosing(WindowEvent e) {
dispose();
}
}
);
}
class FilteredStream
extends FilterOutputStream {
public FilteredStream(OutputStream aStream) {
super(aStream);
}
public
void write(
byte b[])
throws IOException {
String aString =
new String(b);
aTextArea.append(aString);
}
public
void write(
byte b[],
int off,
int len)
throws IOException {
String aString =
new String(b , off , len);
aTextArea.append(aString);
if (logFile) {
FileWriter aWriter =
new FileWriter(
"error.log",
true);
aWriter.write(aString);
aWriter.close();
}
}
}
public
void displayLog() {
Dimension dim = getToolkit().getScreenSize();
Rectangle abounds = getBounds();
Dimension dd = getSize();
setLocation((dim.width - abounds.width) / 2,
(dim.height - abounds.height) / 2);
setVisible(
true);
requestFocus();
}
public
static
void main(String s[]){
try {
// force an exception for demonstration purpose
Class.forName(
"unknown").newInstance();
}
catch (Exception e) {
// for applet, always RedirectedFrame(false)
RedirectedFrame r =
new RedirectedFrame(
true);
e.printStackTrace();
}
}
}