`
D-tune
  • 浏览: 77721 次
  • 性别: Icon_minigender_1
  • 来自: 上海浦东
文章分类
社区版块
存档分类
最新评论

Java标准输出重定向到GUI

阅读更多
实现输出从控制台到GUI并不复杂,只需要将标准输出重定向。

重定向标准输出很easy,System 类里有两个静态方法setErr(PrintStream err) 和 setOut(PrintStream out) 分别用于重定位“标准”错误输出流和“标准”输出流。只需要在程序初始时设置即可:
   
// GUIPrintStream guiPrintStream = new GUIPrintStream(System.out, jTextArea);
System.setErr(guiPrintStream);
System.setOut(guiPrintStream);

在上面的代码中,我们发现一个新的类 GUIPrintStream,这是我们为 PrintStream 所做的包装。因为我们的输出目标位置是GUI,所以需要在 PrintStream 上做些文章,大家请看下面 GUIPrintStream 的代码:
/**//*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

import java.io.OutputStream;
import java.io.PrintStream;
import javax.swing.SwingUtilities;
import javax.swing.text.JTextComponent;

/** *//**
 * 输出到文本组件的流。
 * 
 * @author Chen Wei 
 * @website www.chenwei.mobi
 * @email chenweionline@hotmail.com
 */
public class GUIPrintStream extends PrintStream...{
    
    private JTextComponent component;
    private StringBuffer sb = new StringBuffer();
    
    public GUIPrintStream(OutputStream out, JTextComponent component)...{
        super(out);
        this.component = component;
    }
    
    /** *//**
     * 重写write()方法,将输出信息填充到GUI组件。
     * @param buf
     * @param off
     * @param len
     */
    @Override
    public void write(byte[] buf, int off, int len) ...{
        final String message = new String(buf, off, len); 

        SwingUtilities.invokeLater(new Runnable()...{
            public void run()...{
                sb.append(message);
                component.setText(sb.toString());
            }
        });
    }
}
 
类 GUIPrintStream,继承自 PrintStream 并且对它进行了一些修改。

GUIPrintStream 在构造函数中增加了一个 JTextComponent 变量,它就是我们的目标输出 GUI 组件,它规定了目标输出组件是一个文本组件。接下来覆写了 write(byte[] buf, int off, int len)方法,这个方法原来的作用是将 len 字节从指定的初始偏移量为 off 的 byte 数组写入此流,现在经过我们的修改,变成了将 byte 数组包装成 String 写入目标 GUI 组件。

简单的代码完成了将标准输出重定向到 GUI 的全过程。由此延伸,还可以将标准输出重定向到文本文件、从GUI获取标准输入等,就不一一介绍。

 



测试:

public class MainFrame extends javax.swing.JFrame {
    public MainFrame() {
        initComponents();
        
       // 重定向到通过文本组件构建的组件输出流中。
     System.setOut(new GUIPrintStream(System.out, textArea));
    }
    
    private void initComponents() {
        scrollPane = new javax.swing.JScrollPane();
        textArea = new javax.swing.JTextArea();
        btnOut = new javax.swing.JButton();
        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setTitle("标准输出重定向到GUI - www.chenwei.mobi");
        textArea.setColumns(20); 


        textArea.setRows(5);
        scrollPane.setViewportView(textArea);
        getContentPane().add(scrollPane, java.awt.BorderLayout.CENTER);
        btnOut.setText("System.out.println(System.getProperties());");
        btnOut.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnOutActionPerformed(evt);
            }
        });
        getContentPane().add(btnOut, java.awt.BorderLayout.PAGE_END);
        pack(); 


    }
    private void btnOutActionPerformed(java.awt.event.ActionEvent evt) {
        System.out.println(System.getProperties());
    }
    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new MainFrame().setVisible(true);
            }
        });
    }
    private javax.swing.JButton btnOut;
    private javax.swing.JScrollPane scrollPane; 


    private javax.swing.JTextArea textArea; 
}
 
分享到:
评论

相关推荐

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

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

    Java程序 中截获控制台 输出

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

    在java中截获控制台输出

    // 将错误输出合并到标准输出 Process process = pb.start(); InputStream processOutput = process.getInputStream(); BufferedReader reader = new BufferedReader(new InputStreamReader(processOutput)); ...

    重定向log4j日志到jtextarea

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

    java反编译jad.exe

    jad.exe会将反编译的结果输出到标准输出,可以配合重定向操作符保存到文件。 然而,值得注意的是,Java反编译并不总是完全准确的。由于字节码的抽象性,有些复杂或者优化过的代码可能无法完全还原为等效的源代码。...

    java生成exe打包工具exe4j

    9. **控制台输出**:如果需要,exe4j允许将Java应用的控制台输出重定向到用户的系统控制台,这对于调试和日志记录非常有用。 10. **用户界面**:exe4j提供了一个直观的图形用户界面(GUI),使得配置和打包过程变得...

    JAVA远程控制软个

    6. **输入输出重定向**:为了让用户能够控制远程计算机的键盘和鼠标,需要实现输入输出的重定向功能,这可以通过模拟键盘和鼠标事件来实现。 7. **权限管理**:为了防止未经授权的访问,远程控制软件通常会包含权限...

    java考试复习题(小楚版)

    1. 访问1.jsp后,`request.setAttribute("name","william")`设置了一个属性,然后重定向到2.jsp。在2.jsp中,属性被获取并打印,因此1.jsp的输出是`name = null`,2.jsp的输出是`name = william`。 2. 代码段展示了...

    java编程百例

    Java编程百例是一个集合,包含了100个不同的Java编程示例,涵盖了基础到进阶的各种编程场景。这些实例旨在帮助学习者理解Java语言的核心概念,掌握编程技巧,并且通过实践来深化理论知识。让我们逐一探讨这些关键...

    java的数据输入:从控制台输入数据定义.pdf

    如果虚拟机从一个交互式命令行开始启动,且没有重定向标准输入和输出流,那么其控制台将存在,并且通常连接到键盘并从虚拟机启动的地方显示。如果虚拟机是自动启动的,例如由后台作业调度程序启动,那么它通常没有...

    Thinking in Java 中文第四版+习题答案

    10.7.5 重定向标准 10.8 压缩 10.8.1 用GZIP进行简单压缩 10.8.2 用Zip进行多文件保存 10.8.3 Java归档(jar)实用程序 10.9 对象串联 10.9.1 寻找类 10.9.2 序列化的控制 10.9.3 利用“持久性” 10.10 总结 10.11 ...

    反编译class反编译class

    4. **重定向输出到文件** ```plaintext c:\java>jad -p example1.class > example1.java ``` 将反编译的结果写入到`example1.java`文件中。 5. **指定输出目录** ```plaintext c:\java>jad -o-d test -sjava ...

    java 编程入门思考

    10.7.5 重定向标准IO 10.8 压缩 10.8.1 用GZIP进行简单压缩 10.8.2 用Zip进行多文件保存 10.8.3 Java归档(jar)实用程序 10.9 对象串联 10.9.1 寻找类 10.9.2 序列化的控制 10.9.3 利用“持久性” 10.10 总结 10.11...

    以文字的形式显示窗体

    3. **文本流与输出重定向**:在CLI环境下,程序可以向标准输出流写入文本,这可以通过管道(pipe)、重定向(redirect)等方式传递到其他程序或文件。例如,在Unix/Linux系统中,`>`符号用于将输出重定向到文件。 4...

    Java初学者入门教学

    10.7.5 重定向标准IO 10.8 压缩 10.8.1 用GZIP进行简单压缩 10.8.2 用Zip进行多文件保存 10.8.3 Java归档(jar)实用程序 10.9 对象串联 10.9.1 寻找类 10.9.2 序列化的控制 10.9.3 利用“持久性” 10.10 总结 10.11...

    java的数据输入:从控制台输入数据.pdf

    如果虚拟机是从交互式命令行启动,并且没有重定向标准输入和输出流,那么它会有控制台,并且通常连接到键盘和显示屏幕。相反,如果虚拟机是由后台作业调度程序自动启动,那么它通常不会有控制台。 在Java中,有多种...

    java联想(中文)

    10.7.5 重定向标准IO 10.8 压缩 10.8.1 用GZIP进行简单压缩 10.8.2 用Zip进行多文件保存 10.8.3 Java归档(jar)实用程序 10.9 对象串联 10.9.1 寻找类 10.9.2 序列化的控制 10.9.3 利用“持久性” 10.10 总结 10.11...

    疯狂JAVA讲义

    学生提问:为什么我创建Java对象时从未感觉到java.lang.Object的构造器被调用过? 150 5.7 多态 151 5.7.1 多态性 151 5.7.2 引用变量的强制类型转换 152 5.7.3 instanceof运算符 154 5.8 继承与组合 154 ...

    Java语言基础下载

    第十章:JAVA GUI概述 155 学习目标 155 GUI概述及组成 156 Swing优点 157 布局管理器 158 BorderLayout 159 GridLayout 161 CardLayout 162 GridBagLayout 164 实例分析 165 内容总结 172 独立实践 173 第十一章 ...

    Java(J2SE、J2EE)学习小结

    本文将围绕Java的基础知识、进阶概念以及一些常见面试题进行探讨,帮助读者深入理解Java J2SE(Java标准版)和J2EE(Java企业版)的学习要点。 1. 面向对象思想:面向对象编程(OOP)是Java的核心,它强调通过对象...

Global site tag (gtag.js) - Google Analytics