知识大全 Java标准输出重定向到GUI

Posted 标准

篇首语:丈夫欲遂平生志,一载寒窗一举汤。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Java标准输出重定向到GUI相关的知识,希望对你有一定的参考价值。

Java标准输出重定向到GUI  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  实现输出从控制台到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 的代码

  Java代码

  /**//*

  * 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 chenwei mobi

  * @email chenw

  */

  public class GUIPrintStream extends PrintStream

  private JTextComponent ponent;

  private StringBuffer sb = new StringBuffer();

  public GUIPrintStream(OutputStream out JTextComponent ponent)

  super(out);

  ponent = ponent;

  

  /** *//**

  * 重写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);

  ponent setText(sb toString());

  

  );

  

  

  /**//*

  * 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 chenwei mobi

  * @email chenw

  */

  public class GUIPrintStream extends PrintStream

  private JTextComponent ponent;

  private StringBuffer sb = new StringBuffer();

  public GUIPrintStream(OutputStream out JTextComponent ponent)

  super(out);

  ponent = ponent;

  

  /** *//**

  * 重写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);

  ponent setText(sb toString());

  

  );

  

  

  类 GUIPrintStream 继承自 PrintStream 并且对它进行了一些修改

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

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

  测试

  Java代码

  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 chenwei mobi );

  textArea setColumns( );

  textArea setRows( );

  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 mand 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;

cha138/Article/program/Java/hx/201311/25870

相关参考