Java-怎样在jframe中显示控制台的内容(就是把一个System.out.println的东西显示在jframe中)

发布于 2016-11-21 17:35:19 字数 0 浏览 1251 评论 1

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

灵芸 2017-07-01 18:48:36

你需要:
1. 重定向System.out;
http://docs.oracle.com/javase/6/docs/api/java/lang/System.html#setOut%28java.io.PrintStream%29
可以选择 把System.out 重定向到一个ByteArrayOutputStream (注意这里是有一个缓存的, 确保缓存足够大);
http://docs.oracle.com/javase/7/docs/api/java/io/ByteArrayOutputStream.html

下面 2.1. 可以写一个Runnable 固定让AWT event dispatch thread隔一段时间去读ByteArrayOutputStream(ByteArrayOutputStream.toString()), 更新到JFrame (注意多线程问题); 代码比较简单. 写一个示例:

Executors.newScheduledThreadPool(1).scheduleAtFixedRate(
new Runnable() {
public void run() { SwingUtilities.invokeLater(
new Runnable(){
final String str=tyteArrayOutputStream.toString();
// update JFrame using str ...
}
);
}
},
10, 10, SECONDS);
};

2.2. 或者可以扩展一个OutputStream来更新JFrame, 好处是可以实时更新JFrame. 这里写一个示例, 简单的更新一个文件(更新JFrame一样, 但是需要用到SwingUtilities.invokeLater).

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintStream;
import org.junit.Test;

public class TestStream extends OutputStream{

private PrintStream ps=null;

public TestStream(){
try {
ps=new PrintStream(new File("c:temptest.txt"));
} catch (FileNotFoundException e) {
}
}

@Override
public void write(int paramInt) throws IOException {
ps.write(paramInt);
}

@Test
public void testtest() throws InterruptedException{
PrintStream ps=new PrintStream(new TestStream());
System.setOut(ps);
System.setErr(ps);
new Thread(new Runnable(){
@Override
public void run() {
throw new RuntimeException();
}
}).start();
Thread.sleep(100);
}

}

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文