你需要: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) {}}
@Overridepublic void write(int paramInt) throws IOException {ps.write(paramInt);}
@Testpublic void testtest() throws InterruptedException{PrintStream ps=new PrintStream(new TestStream());System.setOut(ps);System.setErr(ps);new Thread(new Runnable(){@Overridepublic void run() {throw new RuntimeException();}}).start();Thread.sleep(100);}
}
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
有一天你能到我的心里去,你会看到那里全是你给的伤悲。
文章 0 评论 0
接受
发布评论
评论(1)
你需要:
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);
}
}