Redirect output(stdout/stderr) to a frameTag(s): IO


[JDK1.1]
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();
      }
    }
}
Check also this simple Swing solution.
blog comments powered by Disqus