`
D-tune
  • 浏览: 76604 次
  • 性别: 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 标准输出重定向到 Swing 文本组件的样例程序。

    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初学者入门教学

    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联想(中文)

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

    疯狂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_Thinking in 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...

    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 ...

    Thinking in 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核心技术II(第8版)

    11.1.3 重定向输入和输出 11.1.4 调用脚本的函数和方法 11.1.5 编译脚本 11.1.6 一个示例:用脚本处理GUI事件 11.2 编译器API 11.2.1 编译便捷之法 11.2.2 使用编译工具 11.2.3 一个示例:动态Java代码生成 11.3 ...

    JAVA_Thinking in Java(中文版 由yyc,spirit整理).chm

    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...

    Think in Java(中文版)chm格式

    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 ...

    Java开发技术大全 电子版

    第7章Java的输入和输出237 7.1文件和输入输出流237 7.2InputStream类和OutputStream类的使用238 7.2.1InputStream中的方法238 7.2.2OutputStream中的方法239 7.2.3文件输入流FileInputStream239 7.2.4文件输出...

    Thinking in Java(中文版 由yyc,spirit整理).chm

    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...

    ThinkInJava

    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...

    wikipedia-redirect-pages

    维基百科 解析来自 Wikipedia、DBPedia 和 Freebase 的有用数据 项目:重定向页面 要求 要运行这个项目,你需要...从解析到索引中选择输出文件 - 将创建索引 搜索 贡献 分叉吧 创建您的功能分支( git checkout -b my-

    thinkinjava

    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...

    新版Android开发教程.rar

    � Google 提供了一套 Java 核心包 (J2SE 5,J2SE 6) 的有限子集,尚不承诺遵守 Java 任何 Java 规范 , 可能会造 成J ava 阵营的进一步分裂。 � 现有应用完善度不太够,需要的开发工作量较大。--------------------...

    eclipse 开发c/c++

    所有来自 make、编译器和链接程序的编译消息都被重定向到控制台窗口: 图 7. 带编译器输出的控制台窗口 编译成功之后, 您或许想要运行您的应用程序。所有用于运行和调试的选项都位于主 Eclipse 菜单的 Run 菜单...

    网管教程 从入门到精通软件篇.txt

    如果系统检测到无效或非标准分区表标记,将提示用户是否继续执行该命令。除非您访问驱动器有问题,否则不要继续进行。向系统分区写入新的主引导记录可能破坏分区表并导致分区无法访问。  format  将指定的驱动器...

Global site tag (gtag.js) - Google Analytics