java gui 控制台_在GUI面板中创建Java控制台
这是一个功能强大的课程。您可以将此实例安装到系统中并使用以下错误:
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控制台相关推荐
- java swing 退出程序_如何从cod中关闭Java Swing应用程序
如何从cod中关闭Java Swing应用程序 从代码中终止Swing应用程序的正确方法是什么,有哪些陷阱? 我试图在计时器启动后自动关闭我的应用程序. 但是只是在JFrame上拨打dispose() ...
- java string 反序列化_无法反序列化VALUE_STRING中的java.util.ArrayList实例
我有一个使用Jersey构建并部署在AppEngine中的REST服务.REST服务实现使用application/json媒体类型的动词PUT .数据绑定由Jackson进行. 该动词使用JSON中 ...
- java静态方法声明_方法本地类中的Java最终静态声明
在方法内部声明局部内部类时,为什么包含最终的静态String或int是合法的,而包含其他对象却不合法? 例如: class Outer { void aMethod() { class Inner { ...
- 什么是jdk的java运行工具_下面( )是 JDK 中的 JAVA 运行工具。
工作团队名词解释 以下内容属于行政程序合法的是(). 什么是"985工程"和"211工程"? 怎样从盐度结构上对河口进行分类? 柴油机喷油泵的供油拉杆由()控制 ...
- 【开发环境】Android 命令行中执行 Java 程序 ( IntelliJ IDEA 中创建 Java / Kotlin 工程 | dx 打包 DEX 字节码文件 | dalvikvm 命令 )
文章目录 前言 一.IntelliJ IDEA 中创建 Java / Kotlin 工程 二.准备 Java 和 Kotlin 代码 三.编译在 PC 上可执行的 Java / Kotlin JAR ...
- 在VScode中创建Java项目
在VScode中创建Java项目 1. 配置SDK环境 2.在vscode中下载Java插件 之前使用过idea或者其他IDE编写Java已经下载并配置好了sdk,可以直接跳转到第二步.没有配置过sd ...
- 用控制台怎么编译java程序_怎么在cmd中运行java控制台程序?
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 2010-08-07 17:00 1,111 SendGift.java 2010-08-09 17:40 ...
- amd cpu不能在cmd环境下运行java代码_如何在Windows10中配置java的JDK环境
今天给大家分享一下如何配置java的JDK环境.操作步骤如下: 1.下载好 jdk 的安装文件,我下载的是 jdk-10.0.1_windows-x64_bin.exe 这个版本的安装文件: 2.使用 ...
- java 标量替换_详解jvm中的标量替换
概述 通常在java中创建一个对象,大家都认为是在堆中创建. 在jdk6开始有逃逸分析,标量替换等技术,关于在堆中创建对象不再绝对. 关于标量替换,通过以下几点进行概述: 逃逸分析 标量替换是什么 测 ...
最新文章
- deepfm代码参考
- [转]密码技术-实现数字信封和数字签名
- 转一个无聊的爱情故事:如果有个女生为你哭
- UE3 移动设备分析
- sip系统完整性是什么?SIP系统完整性保护关闭方法(含M1)
- php 框架测试,PHP测试框架PHPUnit组织测试操作示例
- Linux应用开发【第十四章】CAN编程应用开发
- 用ADB操纵手机实现连点器(折衷案)
- 推荐几个新手可以在网上赚钱的几个项目
- 台式计算机关闭屏幕快捷键,关闭电脑屏幕的快捷键
- 公司股权分配的七大简明实操建议
- 操作系统单内核和微内核的区别
- 开源视频插帧软件DAIN使用教程
- java小游戏之捕鱼达人,学了java,妈妈不再担心我去网吧游戏厅了!
- chmod -R xxx 3位数字权限对照表
- 如何修改mtp模式在电脑上显示的存储容量大小?
- 【附白皮书下载】制造业数字化转型专家黄正杰:设备健康如何管理?
- RuntimeError: cannot release un-acquired lock
- 玩转Eclipse的Wildfly安装、配置到部署
- 验证手机号是否注册过爱奇艺