`

把控制台重定向到GUI组件上

    博客分类:
  • java
阅读更多

最近为一个项目的服务器的做一个界面的时候,为了能把原来在后台打印出来的相关信息重定向到GUI界面的时候,费了一些心思。都是以前在实现的时候大多数信息的打印和测试时使用的都是System.out和System.err之类,图个方便 ,没有使用log功能。当然这是个不好的习惯。
   刚 开始的时候用Swing做了一个面板,采用JTextPane组件作为打印信息的容器。可能是太久没有用Swing了,在测试的时候这个东西的水平滑动块 老是随着信息的显示自动地滑向最后的地方,而且打印信息看起来很凌乱。后来就换用SWT,把打印的信息容器换用Text组件,把样式定义为 SWT.MULT | SWT.V_SCROLL | SWT.WRAP ,让它可以自动换行。
   查一下JDK的API文档,System类 提供了可以重定向的方法setOut(PrintStream out)、setErr(PrintStream err)、setIn(InputStream in)。在此我们只需求使用setOut和setErr就够了,这二个方法都要传入一个PrintStream类型的参数,只要在调用打印信息的前面调用 这二个方法重设输出流和错误流就可以达到我们的目的。那么我们继承PrintStream类,并把要显示信息的组件作为参数传入到这个自定义的打印流类 中。

 1 public   class  MyPrintStream  extends  PrintStream  {
 2
 3      private  Text text;
 4     
 5      public  MyPrintStream(OutputStream out, Text text)  {
 6          super (out);
 7          this .text  =  text;
 8     }

 9
10      /** */ /**
11      * 在这里重截,所有的打印方法都要调用的方法
12       */

13      public   void  write( byte [] buf,  int  off,  int  len)  {
14          final  String message  =   new  String(buf, off, len);
15         
16          /**/ /*  SWT非界面线程访问组件的方式  */
17         Display.getDefault().syncExec( new  Thread() {
18              public   void  run() {
19                  /**/ /*  在这里把信息添加到组件中  */
20                 text.append(message);
21             }

22         }
);
23     }

24     
25 }


把组件作为参数传入到这个打印流中,并重写父类的write(byte[] buf, int off, int len)方法,把写出的信息添加到组件上,注意到重载了带OutputStream的构造方法。
   这里有二点必须注意,确保组件在调用打印信息添加前是已经被正确创建的,另外必须注册不同GUI组件对线程的访问形式,像上面的SWT就对界面的访问有严格的规定。
   完成了PrintStream后,下面是如何使用,在我们启动界面后,使用下面的方式:

1 MyPrintStream mps  =   new  MyPrintStream(System.out, text);
2         System.setOut(mps);
3         System.setErr(mps);


,这样就可以把原来程序里的所有System.out和System.err信息转移到你的GUI界面上。

 

原文地址:http://www.blogjava.net/nighty/archive/2007/08/27/140100.html

分享到:
评论

相关推荐

    【Code】标准输出重定向到GUI

    总的来说,Java的`System.setOut()`和`System.setErr()`方法为我们提供了强大的灵活性,允许我们将标准输出和错误输出重定向到任何我们想要的地方,包括GUI组件。这样的设计使得开发者可以轻松地将控制台风格的应用...

    vs2008,控制台程序输入输出重定向

    通常,它会创建一个子进程,将控制台程序的输入输出与GUI程序的某些组件(如文本框或编辑控件)关联起来,或者通过管道或内存缓冲区实现数据交换。 总的来说,输入输出重定向是C++编程中的一项高级技巧,特别是在...

    QT重定向日志到文件

    在QT中,为了便于调试和监控程序运行状态,通常会将日志信息输出到控制台或者重定向到文件。"QT重定向日志到文件"这个主题,涉及到的关键知识点主要包括以下几个方面: 1. **QT日志系统**:QT内部有一个简单的日志...

    Python PyQt5运行程序把输出信息展示到GUI图形界面上

    # 在这里添加代码,将info字符串显示在GUI上,例如添加到文本框或标签中 pass ``` 在类的初始化中,我们连接了`show_infoes_signal`信号到`show_infoes`槽函数。然后在需要的地方,比如在执行数据库操作时,我们...

    重定向log4j日志到jtextarea

    在某些情况下,我们可能希望将Log4j的日志输出直接重定向到JTextArea,以便于在GUI应用程序中实时查看日志信息。这在调试、监控或用户交互中非常有用。 首先,我们需要理解Log4j的工作原理。Log4j的核心组件包括...

    Java程序 中截获控制台 输出

    在GUI应用中,这样的组件可以帮助开发者实时查看程序运行状态,或者让用户在无头环境下(例如服务器)也能获取到输出信息。 具体实现上,通常会通过以下步骤来截获控制台输出: 1. 创建一个新的`PrintStream`实例...

    在java中截获控制台输出

    为了解决这个问题,我们可以自定义一个`PrintStream`类的子类,用于捕获这些输出,并将其重定向到我们创建的Swing文本组件,如`JTextArea`。 以下是一些关键步骤: 1. **创建自定义`PrintStream`**:我们需要继承`...

    Windows XP控制台图解教程

    2. 使用重定向符号(> 和 >>):将命令输出重定向到文件,覆盖(>)或追加(>>)原有内容。 七、故障排查 在遇到问题时,控制台是诊断和修复系统问题的重要工具。例如,使用“eventvwr.msc”查看事件查看器中的错误...

    console_cmdline.rar_控制台_窗口 控制台

    首先,控制台是计算机系统中的一个基本组件,通常用于执行命令行接口(CLI)任务。与图形用户界面(GUI)相比,控制台提供了更直接的系统访问方式,特别适合进行系统管理、自动化脚本编写和调试工作。在Windows操作...

    Redirecting Standard Output to a CEdit Control (27KB)

    在标准C++环境中,程序的输出通常是发送到控制台的,但在这个场景下,我们想让这些输出直接显示在CEdit控件中,这样可以为用户提供更友好的交互体验。 要实现这一功能,我们需要创建一个CEdit对象,并在运行时捕获...

    浪潮英信服务器 NF5280M5 用户手册 V1.1.pdf

    和系统串行日志记录、控制台重定向(KVM)、虚拟媒体、Redfish等。 硬件选件安装章节则包括了处理器选件、内存选件、热插拔硬盘选件、冗余热插拔电源选件、扩展卡选件、导风罩选件的安装。布线章节主要涉及了硬件的...

    XWindowSystem使用.pptx

    3. **输入/输出重定向**:将命令输出重定向到文件或从文件读取输入。 4. **管道**:连接多个命令,使前一个命令的输出成为后一个命令的输入。 5. **Shell脚本**:编写简单的程序,集合一系列命令进行自动化操作。 6....

    DES加解密 MFC

    尽管MFC主要用于图形用户界面(GUI)编程,但在描述中提到了“控制台下的代码”,这意味着可能需要在MFC程序中嵌入控制台,以便输入和输出数据,例如通过`AllocConsole`和`freopen`函数在MFC程序中创建和重定向...

    Qt第三方扩展库 - Libqxt

    Qt是一个广泛使用的开源跨平台应用程序开发框架,它基于C++,并提供了丰富的图形用户界面(GUI)工具和非GUI功能。LibQxt,作为Qt的一个第三方扩展库,进一步增强了Qt的功能,为开发者提供了更多实用的类和功能,以...

    CMD 编程调试命令增强版 JP Software CMDebug 25.00.26 + x64.zip

    将击键发送到任何应用程序(控制台或 GUI) 。 TCC-RT 包含用于 ZIP,7ZIP,TAR,JAR,GZIP 和 BZIP 文件的内部压缩和提取命令。 您可以在所有命令处理器文件处理命令(COPY,DEL,MOVE 等)中访问 FTP,TFTP 和 ...

    wxpython中文版

    - **重定向输出**:如何修改wxPython程序输出到控制台的过程。 - **关闭wxPython程序**: - 正常关闭:程序自行完成清理工作后退出。 - 紧急关闭:通常涉及异常处理,确保程序资源被正确释放。 - **顶级窗口对象...

    Linux英语文档常用单词表.docx

    3. **Local Console** 和 **Console**: 控制台是用户与计算机交互的界面,本地控制台通常指的是直接连接到硬件的终端设备。 4. **Desktop** 和 **GNOME**: GNOME是一个流行的桌面环境,提供了用户友好的图形用户...

    2021-2022计算机二级等级考试试题及答案No.12801.docx

    这意味着它们完全由Java编写,不依赖于本地平台的GUI组件,从而实现了跨平台的兼容性。 #### 11. MySQL数据库备份命令 - **知识点**:`mysqldump`是MySQL提供的用于备份整个数据库的命令。 - **解析**:`mysqldump`...

Global site tag (gtag.js) - Google Analytics