我是靠谱客的博主 仁爱豆芽,最近开发中收集的这篇文章主要介绍java textarea_java – 如何将输出流设置为TextArea,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

您需要将打印流重定向到您可以控制的输出流…

这是我为正在努力工作的应用程序开发的概念示例.当我们在用户站点运行时,我们使用它来调出输出控制台,这样我们就可以看到发送到标准输出的内容……直到我们修复了我们的日志记录;)

基本上它将自定义OutputStream放在打印流和控制台之间以捕获输出,但仍然允许将内容打印到控制台.如果您从命令行或IDE运行该程序,这将非常有用.如果你想要的话,你可以设置一个开关来阻止它……

public class TestRedirect {

public static void main(String[] args) {

new TestRedirect();

}

public TestRedirect() {

EventQueue.invokeLater(new Runnable() {

@Override

public void run() {

try {

UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());

} catch (ClassNotFoundException ex) {

} catch (InstantiationException ex) {

} catch (IllegalAccessException ex) {

} catch (UnsupportedLookAndFeelException ex) {

}

CapturePane capturePane = new CapturePane();

JFrame frame = new JFrame();

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.setLayout(new BorderLayout());

frame.add(capturePane);

frame.setSize(200, 200);

frame.setLocationRelativeTo(null);

frame.setVisible(true);

PrintStream ps = System.out;

System.setOut(new PrintStream(new StreamCapturer("STDOUT", capturePane, ps)));

System.out.println("Hello, this is a test");

System.out.println("Wave if you can see me");

}

});

}

public class CapturePane extends JPanel implements Consumer {

private JTextArea output;

public CapturePane() {

setLayout(new BorderLayout());

output = new JTextArea();

add(new JScrollPane(output));

}

@Override

public void appendText(final String text) {

if (EventQueue.isDispatchThread()) {

output.append(text);

output.setCaretPosition(output.getText().length());

} else {

EventQueue.invokeLater(new Runnable() {

@Override

public void run() {

appendText(text);

}

});

}

}

}

public interface Consumer {

public void appendText(String text);

}

public class StreamCapturer extends OutputStream {

private StringBuilder buffer;

private String prefix;

private Consumer consumer;

private PrintStream old;

public StreamCapturer(String prefix, Consumer consumer, PrintStream old) {

this.prefix = prefix;

buffer = new StringBuilder(128);

buffer.append("[").append(prefix).append("] ");

this.old = old;

this.consumer = consumer;

}

@Override

public void write(int b) throws IOException {

char c = (char) b;

String value = Character.toString(c);

buffer.append(value);

if (value.equals("

")) {

consumer.appendText(buffer.toString());

buffer.delete(0, buffer.length());

buffer.append("[").append(prefix).append("] ");

}

old.print(c);

}

}

}

更新了工作示例.在Windows 7,Java 6和Mac OS Lion Java 7上进行测试

最后

以上就是仁爱豆芽为你收集整理的java textarea_java – 如何将输出流设置为TextArea的全部内容,希望文章能够帮你解决java textarea_java – 如何将输出流设置为TextArea所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(44)

评论列表共有 0 条评论

立即
投稿
返回
顶部