最近为一个项目的服务器的做一个界面的时候,为了能把原来在后台打印出来的相关信息重定向到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
if(text != null && !text.isDisposed()){
16
/**/
/*
SWT非界面线程访问组件的方式
*/
17
Display.getDefault().syncExec(
new
Thread()
{
18
public
void
run()
{
19
/**/
/*
在这里把信息添加到组件中
*/
20
text.append(message);
21
}
22
}
);
}else{
super.write(buf, off, len);
把组件作为参数传入到这个打印流中,并重写父类的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
分享到:
相关推荐
总的来说,Java的`System.setOut()`和`System.setErr()`方法为我们提供了强大的灵活性,允许我们将标准输出和错误输出重定向到任何我们想要的地方,包括GUI组件。这样的设计使得开发者可以轻松地将控制台风格的应用...
通常,它会创建一个子进程,将控制台程序的输入输出与GUI程序的某些组件(如文本框或编辑控件)关联起来,或者通过管道或内存缓冲区实现数据交换。 总的来说,输入输出重定向是C++编程中的一项高级技巧,特别是在...
在QT中,为了便于调试和监控程序运行状态,通常会将日志信息输出到控制台或者重定向到文件。"QT重定向日志到文件"这个主题,涉及到的关键知识点主要包括以下几个方面: 1. **QT日志系统**:QT内部有一个简单的日志...
# 在这里添加代码,将info字符串显示在GUI上,例如添加到文本框或标签中 pass ``` 在类的初始化中,我们连接了`show_infoes_signal`信号到`show_infoes`槽函数。然后在需要的地方,比如在执行数据库操作时,我们...
在某些情况下,我们可能希望将Log4j的日志输出直接重定向到JTextArea,以便于在GUI应用程序中实时查看日志信息。这在调试、监控或用户交互中非常有用。 首先,我们需要理解Log4j的工作原理。Log4j的核心组件包括...
在GUI应用中,这样的组件可以帮助开发者实时查看程序运行状态,或者让用户在无头环境下(例如服务器)也能获取到输出信息。 具体实现上,通常会通过以下步骤来截获控制台输出: 1. 创建一个新的`PrintStream`实例...
为了解决这个问题,我们可以自定义一个`PrintStream`类的子类,用于捕获这些输出,并将其重定向到我们创建的Swing文本组件,如`JTextArea`。 以下是一些关键步骤: 1. **创建自定义`PrintStream`**:我们需要继承`...
2. 使用重定向符号(> 和 >>):将命令输出重定向到文件,覆盖(>)或追加(>>)原有内容。 七、故障排查 在遇到问题时,控制台是诊断和修复系统问题的重要工具。例如,使用“eventvwr.msc”查看事件查看器中的错误...
首先,控制台是计算机系统中的一个基本组件,通常用于执行命令行接口(CLI)任务。与图形用户界面(GUI)相比,控制台提供了更直接的系统访问方式,特别适合进行系统管理、自动化脚本编写和调试工作。在Windows操作...
在标准C++环境中,程序的输出通常是发送到控制台的,但在这个场景下,我们想让这些输出直接显示在CEdit控件中,这样可以为用户提供更友好的交互体验。 要实现这一功能,我们需要创建一个CEdit对象,并在运行时捕获...
和系统串行日志记录、控制台重定向(KVM)、虚拟媒体、Redfish等。 硬件选件安装章节则包括了处理器选件、内存选件、热插拔硬盘选件、冗余热插拔电源选件、扩展卡选件、导风罩选件的安装。布线章节主要涉及了硬件的...
3. **输入/输出重定向**:将命令输出重定向到文件或从文件读取输入。 4. **管道**:连接多个命令,使前一个命令的输出成为后一个命令的输入。 5. **Shell脚本**:编写简单的程序,集合一系列命令进行自动化操作。 6....
尽管MFC主要用于图形用户界面(GUI)编程,但在描述中提到了“控制台下的代码”,这意味着可能需要在MFC程序中嵌入控制台,以便输入和输出数据,例如通过`AllocConsole`和`freopen`函数在MFC程序中创建和重定向...
Qt是一个广泛使用的开源跨平台应用程序开发框架,它基于C++,并提供了丰富的图形用户界面(GUI)工具和非GUI功能。LibQxt,作为Qt的一个第三方扩展库,进一步增强了Qt的功能,为开发者提供了更多实用的类和功能,以...
将击键发送到任何应用程序(控制台或 GUI) 。 TCC-RT 包含用于 ZIP,7ZIP,TAR,JAR,GZIP 和 BZIP 文件的内部压缩和提取命令。 您可以在所有命令处理器文件处理命令(COPY,DEL,MOVE 等)中访问 FTP,TFTP 和 ...
- **重定向输出**:如何修改wxPython程序输出到控制台的过程。 - **关闭wxPython程序**: - 正常关闭:程序自行完成清理工作后退出。 - 紧急关闭:通常涉及异常处理,确保程序资源被正确释放。 - **顶级窗口对象...
3. **Local Console** 和 **Console**: 控制台是用户与计算机交互的界面,本地控制台通常指的是直接连接到硬件的终端设备。 4. **Desktop** 和 **GNOME**: GNOME是一个流行的桌面环境,提供了用户友好的图形用户...
这意味着它们完全由Java编写,不依赖于本地平台的GUI组件,从而实现了跨平台的兼容性。 #### 11. MySQL数据库备份命令 - **知识点**:`mysqldump`是MySQL提供的用于备份整个数据库的命令。 - **解析**:`mysqldump`...