我试图将控制台输出显示到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(…)的位置?