需要帮助重定向文本从控制台到JTextArea/JTextPane



我试图将控制台输出显示到JTextArea/JTextPane。

我的类有几个方法有system.out.println()语句。

我遵循了几个例子,但不能得到一个完美的,符合我的要求

下面是我使用的代码片段:

private JTextArea textArea = new JTextArea(30, 30);
JScrollPane scrollPane = new JScrollPane(textArea);
private  TextAreaOutputStream taOutputStream = new TextAreaOutputStream(
            textArea, "Test");
System.setOut(new PrintStream(taOutputStream));

和我的TextAreaOutPutStream如下:

import java.io.IOException;
import java.io.OutputStream;
import javax.swing.JTextArea;
import javax.swing.SwingUtilities;
public class TextAreaOutputStream extends OutputStream {
    private final JTextArea textArea;
    private final StringBuilder sb = new StringBuilder();
    public TextAreaOutputStream(final JTextArea textArea, String title) {
        this.textArea = textArea;
        this.title = title;
        sb.append(title + "> ");
    }
    @Override
    public void flush() {
    }
    @Override
    public void close() {
    }
    @Override
    public void write(int b) throws IOException {
    textArea.append(String.valueOf((char)b));
    textArea.setCaretPosition(textArea.getDocument().getLength());
    }
}

现在我的问题是,只有在整个程序完成后,我才得到jtextArea上的输出。

当程序遇到system.out.println()并立即将其输出输出到JtextArea时,我如何将其逐一打印出来?

我已经看到了几个例子,他们指定使用swingworker,但在这里,当我有几个方法时,我如何使用它??

请提供您的解决方案

在自动冲洗模式下使用PrintStream

System.setOut(new PrintStream(taOutputStream, true));

我试过使用你的代码(在NetBeans),它工作得很好。哪里是行新的TextAreaOutputStream(…)的位置?

最新更新