Following example uses IO and AWT package to send the output to the frame.

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