易码技术论坛

 找回密码
 加入易码
搜索
查看: 328514|回复: 2

Java中重定向System.out的输出到TextArea

[复制链接]
发表于 2006-12-2 16:14:42 | 显示全部楼层
阅~~~~~~~~~~~~~
发表于 2006-12-2 20:23:26 | 显示全部楼层
这个方法不错
 楼主| 发表于 2006-12-2 13:39:22 | 显示全部楼层 |阅读模式
  做Web服务器时候的收获,原始代码是 EastSun 给我的,不过看着有点乱,而且不是很清楚,于是总结一篇,供大家分享~

原理:
新建一个MyOutputStream类继承于OutputStream类,覆盖原来OutputStream类中的write方法,使其将字符串信息追加到指定的TextArea中。然后用MyOutputStream对象创建一个PrintStream对象,并将后者设定为当前的标准输出即可。
而且这样做了之后不需要去改变原来已有的代码,如果不调用System.setOut(),那么程序便会还是按照原来的方式将信息输出到Console。
  1. public class Shell extends JFrame{
  2.   private JTextArea txtLog;
  3.   private PrintStream printStream;
  4.   ......
  5.   
  6.   public Shell(){
  7.     // 用自己的重载的OutputStream创建一个PrintStream
  8.     printStream = new PrintStream(new MyOutputStream());
  9.     // 指定标准输出到自己创建的PrintStream
  10.     System.setOut(printStream);
  11.     System.setErr(printStream);
  12.     ......
  13.   }
  14.   public class MyOutputStream extends OutputStream{
  15.     public void write(int arg0) throws IOException {
  16.       // 写入指定的字节,忽略
  17.     }   
  18.    
  19.     public void write(byte data[]) throws IOException{
  20.       // 追加一行字符串
  21.       txtLog.append(new String(data));
  22.     }
  23.    
  24.     public void write(byte data[], int off, int len) throws IOException {
  25.       // 追加一行字符串中指定的部分,这个最重要
  26.       txtLog.append(new String(data, off, len));
  27.       // 移动TextArea的光标到最后,实现自动滚动
  28.       txtLog.setCaretPosition(txtLog.getText().length());
  29.     }
  30.   }
  31. }
复制代码
您需要登录后才可以回帖 登录 | 加入易码

本版积分规则

Archiver|手机版|小黑屋|EMAX Studio

GMT+8, 2024-3-29 18:41 , Processed in 0.010862 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表