易截截图软件、单文件、免安装、纯绿色、仅160KB

在Java程序中截获控制台输出

     本文的目标是设计一个基于Swing的JTextArea显示控制台输出。此期间,我们还将讨论一些和Java管道流(PipedInputStream和PipedOutputStream)有关的注意事项。最后还要创建一个能够捕获和显示其他程序(可以是非Java的程序)控制台输出的简单程序。
一、Java管道流
     要在文本框中显示控制台输出,我们必须用某种方法“截取”控制台流。换句话说,我们要有一种高效地读取写入到System.out和System.err所有内容的方法。Java的管道流PipedInputStream和PipedOutputStream是一个非常有效的工具。
     写入到PipedOutputStream输出流的数据可以从对应的PipedInputStream输入流读取。Java的管道流极大地方便了我们截取控制台输出。Listing 1显示了一种非常简单的截取控制台输出方案。 
【Listing 1:用管道流截取控制台输出】
 PipedInputStream pipedIS = new PipedInputStream();
PipedOutputStream pipedOS = new PipedOutputStream();
try {
  pipedOS.connect(pipedIS);
}
catch(IOException e) {
  System.err.println("连接失败");
  System.exit(1);
}
PrintStream ps = new PrintStream(pipedOS);
System.setOut(ps);
System.setErr(ps); 
     这里我们只是建立了一个PipedInputStream,把它设置为所有写入控制台流的数据的最终目的地。所有写入到控制台流的数据都被转到PipedOutputStream,这样,从相应的PipedInputStream读取就可以迅速地截获所有写入控制台流的数据。接下来的事情似乎只剩下在Swing JTextArea中显示从pipedIS流读取的数据,得到一个能够在文本框中显示控制台输出的程序。遗憾的是,在使用Java管道流时有一些重要的注意事项。只有认真对待所有这些注意事项才能保证Listing 1的代码稳定地运行。下面我们来看第一个注意事项。
1.1 注意事项一
  PipedInputStream运用的是一个1024字节固定大小的循环缓冲区。写入PipedOutputStream的数据实际上保存到对应的PipedInputStream的内部缓冲区。从PipedInputStream执行读操作时,读取的数据实际上来自这个内部缓冲区。如果对应的PipedInputStream输入缓冲区已满,任何企图写入PipedOutputStream的线程都将被阻塞。而且这个写操作线程将一直阻塞,直至出现读取PipedInputStream的操作从缓冲区删除数据。


相关文档:

Java:Struts 项目中web.xml文件配置

 web.xml文件对于配置任何Java Web应用都必需的。
(1)配置Struts的ActionServlet
<servlet><!--元素来声明ActionServlet-->
<servlet-name><!--元素:用来定义Servlet的名称-->
<servlet-class><!--元素:用来指定Servlet的完整类名-->
<servlet>
<servlet-name& ......

在Java中产生随机数的两个方法


一、利用random方法来生成随机数。
在Java语言中生成随 机数相对来说比较简单,因为有一个现成的方法可以使用。在Math类中,Java语言提供了一个叫做random的方法。通过这个方法可以让系统产生随机 数。不过默认情况下,其产生的随机数范围比较小,为大于等于0到小于1的double型随机数。虽然其随机数产生的范围比较小,不 ......

Java技术中的缩写及含义

EJB:  Enterprise  JavaBeans  企业JavaBean组件  
IDL:    Interface  Definition  Language  接口定义语言  
J2EE CA:J2EE Connector Architecture J2EE 连接器架构
JAAS  :   The Java Authenticat ......

java中使用sqlite数据库

sqlite数据库第三方java扩展包下载地址:http://www.zentus.com/sqlitejdbc/
有2个包,一个是nested(嵌入式的),一个是native(本地的)。
区别在于:nested 不需要额外的dll文件,但是速度慢。native需要一个额外的dll文件,速度很快。
 1.使用nested包:sqlitejdbc-v037-nested.jar
java代码:
java 代码
packa ......

JAVA 代理模式

动态代理:
public interface Qingke {
void qk();
}
public class dsz implements Qingke{
 
 public void qk() {
  System.out.print("dsz qk");
 }
}
public class Secretary implements InvocationHandler {
 private Object pro;
 private dsz dsz;
 public Obj ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号