在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多线程编程总结:
http://lavasoft.blog.51cto.com/62575/27069
Java关键字final、static使用总结
:
http://xo-tobacoo.javaeye.com/blog/374282
1.public
使用对象:类、接口、成员
介绍:无论它所处在的包定义在哪,该类(接口、成员)都是可访问的
2.private
使用对象 ......
一、利用random方法来生成随机数。
在Java语言中生成随 机数相对来说比较简单,因为有一个现成的方法可以使用。在Math类中,Java语言提供了一个叫做random的方法。通过这个方法可以让系统产生随机 数。不过默认情况下,其产生的随机数范围比较小,为大于等于0到小于1的double型随机数。虽然其随机数产生的范围比较小,不 ......
我们在进行pl/sql编程时打交道最多的就是存储过程了。存储过程的结构是非常的简单的,我们在这里除了学习存储过程的基本结构外,还会学习编写存储过程时相关的一些实用的知识。如:游标的处理,异常的处理,集合的选择等等
1.存储过程结构
1.1 第一个存储过程
create or replace procedure proc1(
  ......
用关键字new生成对象:这是最常用的一种方式,例如 new String("hello")用new生成对象的特点是,这个对象的类必须在编译时就在classpath中,如果没有特别的理由和要求,这是我们生成一个对象的第一选择;
Class.forName(String className)。例如Class c = Class.forName("com.company.jdbc.Driver");这种方法的特点是在编 ......
3.3 游标循环最佳策略
我们在进行PL/SQL编程时,经常需要循环读取结果集的数据。进行逐行处理,这个过程就需要对游标进行循环。对游标进行循环的方法有多种,我们在此一一分析。
create or replace procedure proccycle(p varchar2)
as
cursor c_postype is select pos_type, description ......