这是一个功能强大的课程。您可以将此实例安装到系统中并使用以下错误:

PrintStream con=new PrintStream(new TextAreaOutputStream(...));

System.setOut(con);

System.setErr(con);

更新时间2014-02-19:使用EventQueue.invokeLater()来避免GUI线程问题,这些问题很少会与原始问题一起出现。

更新2014-02-27:更好的实施

更新2014-03-25:正确记录和删除文本区域中的行,run()以避免在附加和删除之间出现竞争条件,如果控制台充满输出,则可能发生这种情况。对我来说,最终结果似乎更清晰。

import java.awt.*;

import java.io.*;

import java.util.*;

import java.util.List;

import javax.swing.*;

public class TextAreaOutputStream

extends OutputStream

{

// *************************************************************************************************

// INSTANCE MEMBERS

// *************************************************************************************************

private byte[]                          oneByte;                                                    // array for write(int val);

private Appender                        appender;                                                   // most recent action

public TextAreaOutputStream(JTextArea txtara) {

this(txtara,1000);

}

public TextAreaOutputStream(JTextArea txtara, int maxlin) {

if(maxlin<1) { throw new IllegalArgumentException("TextAreaOutputStream maximum lines must be positive (value="+maxlin+")"); }

oneByte=new byte[1];

appender=new Appender(txtara,maxlin);

}

/** Clear the current console text area. */

public synchronized void clear() {

if(appender!=null) { appender.clear(); }

}

public synchronized void close() {

appender=null;

}

public synchronized void flush() {

}

public synchronized void write(int val) {

oneByte[0]=(byte)val;

write(oneByte,0,1);

}

public synchronized void write(byte[] ba) {

write(ba,0,ba.length);

}

public synchronized void write(byte[] ba,int str,int len) {

if(appender!=null) { appender.append(bytesToString(ba,str,len)); }

}

@edu.umd.cs.findbugs.annotations.SuppressWarnings("DM_DEFAULT_ENCODING")

static private String bytesToString(byte[] ba, int str, int len) {

try { return new String(ba,str,len,"UTF-8"); } catch(UnsupportedEncodingException thr) { return new String(ba,str,len); } // all JVMs are required to support UTF-8

}

// *************************************************************************************************

// STATIC MEMBERS

// *************************************************************************************************

static class Appender

implements Runnable

{

private final JTextArea             textArea;

private final int                   maxLines;                                                   // maximum lines allowed in text area

private final LinkedList   lengths;                                                    // length of lines within text area

private final List          values;                                                     // values waiting to be appended

private int                         curLength;                                                  // length of current line

private boolean                     clear;

private boolean                     queue;

Appender(JTextArea txtara, int maxlin) {

textArea =txtara;

maxLines =maxlin;

lengths  =new LinkedList();

values   =new ArrayList();

curLength=0;

clear    =false;

queue    =true;

}

synchronized void append(String val) {

values.add(val);

if(queue) { queue=false; EventQueue.invokeLater(this); }

}

synchronized void clear() {

clear=true;

curLength=0;

lengths.clear();

values.clear();

if(queue) { queue=false; EventQueue.invokeLater(this); }

}

// MUST BE THE ONLY METHOD THAT TOUCHES textArea!

public synchronized void run() {

if(clear) { textArea.setText(""); }

for(String val: values) {

curLength+=val.length();

if(val.endsWith(EOL1) || val.endsWith(EOL2)) {

if(lengths.size()>=maxLines) { textArea.replaceRange("",0,lengths.removeFirst()); }

lengths.addLast(curLength);

curLength=0;

}

textArea.append(val);

}

values.clear();

clear =false;

queue =true;

}

static private final String         EOL1="\n";

static private final String         EOL2=System.getProperty("line.separator",EOL1);

}

} /* END PUBLIC CLASS */

java gui 控制台_在GUI面板中创建Java控制台相关推荐

  1. java swing 退出程序_如何从cod中关闭Java Swing应用程序

    如何从cod中关闭Java Swing应用程序 从代码中终止Swing应用程序的正确方法是什么,有哪些陷阱? 我试图在计时器启动后自动关闭我的应用程序. 但是只是在JFrame上拨打dispose() ...

  2. java string 反序列化_无法反序列化VALUE_STRING中的java.util.ArrayList实例

    我有一个使用Jersey构建并部署在AppEngine中的REST服务.REST服务实现使用application/json媒体类型的动词PUT .数据绑定由Jackson进行. 该动词使用JSON中 ...

  3. java静态方法声明_方法本地类中的Java最终静态声明

    在方法内部声明局部内部类时,为什么包含最终的静态String或int是合法的,而包含其他对象却不合法? 例如: class Outer { void aMethod() { class Inner { ...

  4. 什么是jdk的java运行工具_下面( )是 JDK 中的 JAVA 运行工具。

    工作团队名词解释 以下内容属于行政程序合法的是(). 什么是"985工程"和"211工程"? 怎样从盐度结构上对河口进行分类? 柴油机喷油泵的供油拉杆由()控制 ...

  5. 【开发环境】Android 命令行中执行 Java 程序 ( IntelliJ IDEA 中创建 Java / Kotlin 工程 | dx 打包 DEX 字节码文件 | dalvikvm 命令 )

    文章目录 前言 一.IntelliJ IDEA 中创建 Java / Kotlin 工程 二.准备 Java 和 Kotlin 代码 三.编译在 PC 上可执行的 Java / Kotlin JAR ...

  6. 在VScode中创建Java项目

    在VScode中创建Java项目 1. 配置SDK环境 2.在vscode中下载Java插件 之前使用过idea或者其他IDE编写Java已经下载并配置好了sdk,可以直接跳转到第二步.没有配置过sd ...

  7. 用控制台怎么编译java程序_怎么在cmd中运行java控制台程序?

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 2010-08-07  17:00             1,111 SendGift.java 2010-08-09  17:40           ...

  8. amd cpu不能在cmd环境下运行java代码_如何在Windows10中配置java的JDK环境

    今天给大家分享一下如何配置java的JDK环境.操作步骤如下: 1.下载好 jdk 的安装文件,我下载的是 jdk-10.0.1_windows-x64_bin.exe 这个版本的安装文件: 2.使用 ...

  9. java 标量替换_详解jvm中的标量替换

    概述 通常在java中创建一个对象,大家都认为是在堆中创建. 在jdk6开始有逃逸分析,标量替换等技术,关于在堆中创建对象不再绝对. 关于标量替换,通过以下几点进行概述: 逃逸分析 标量替换是什么 测 ...

最新文章

  1. deepfm代码参考
  2. [转]密码技术-实现数字信封和数字签名
  3. 转一个无聊的爱情故事:如果有个女生为你哭
  4. UE3 移动设备分析
  5. sip系统完整性是什么?SIP系统完整性保护关闭方法(含M1)
  6. php 框架测试,PHP测试框架PHPUnit组织测试操作示例
  7. Linux应用开发【第十四章】CAN编程应用开发
  8. 用ADB操纵手机实现连点器(折衷案)
  9. 推荐几个新手可以在网上赚钱的几个项目
  10. 台式计算机关闭屏幕快捷键,关闭电脑屏幕的快捷键
  11. 公司股权分配的七大简明实操建议
  12. 操作系统单内核和微内核的区别
  13. 开源视频插帧软件DAIN使用教程
  14. java小游戏之捕鱼达人,学了java,妈妈不再担心我去网吧游戏厅了!
  15. chmod -R xxx 3位数字权限对照表
  16. 如何修改mtp模式在电脑上显示的存储容量大小?
  17. 【附白皮书下载】制造业数字化转型专家黄正杰:设备健康如何管理?
  18. RuntimeError: cannot release un-acquired lock
  19. 玩转Eclipse的Wildfly安装、配置到部署
  20. 验证手机号是否注册过爱奇艺

热门文章

  1. 正则中除了空格还有什么标识间距
  2. Redis java API ——Jedis的使用
  3. 【Servlet】response对象给用户返回数据
  4. 在java中构建高效的结果缓存
  5. 自定义spring boot的自动配置
  6. phpmyadmin能合并行吗_去二手车行当学徒真的能学到技术吗?过来人劝你要谨慎!...
  7. Java动态代理的两种实现方法
  8. Dp问题:奶牛的聚会
  9. 21行满分代码:1039 到底买不买 (20分)
  10. Cookie和Session实现保存登录状态免登录