Redirect output(stdoutstderr) to a frame

    技术2022-05-11  184

    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();           }        }     }

    最新回复(0)