如何将控制台内容重定向到Java中的textArea?

时间:2011-02-24 16:40:26

标签: java swing jtextarea

我正在尝试在java中的textArea中获取控制台的内容。

例如,如果我们有这个代码,

class FirstApp {
    public static void main (String[] args){
        System.out.println("Hello World");
    }
}

我想将“Hello World”输出到textArea,我必须选择哪个actionPerformed?

5 个答案:

答案 0 :(得分:6)

Message Console显示了一个解决方案。

答案 1 :(得分:4)

我找到了这个简单的解决方案:

首先,您必须创建一个类来替换标准输出:

public class CustomOutputStream extends OutputStream {
    private JTextArea textArea;

    public CustomOutputStream(JTextArea textArea) {
        this.textArea = textArea;
    }

    @Override
    public void write(int b) throws IOException {
        // redirects data to the text area
        textArea.append(String.valueOf((char)b));
        // scrolls the text area to the end of data
        textArea.setCaretPosition(textArea.getDocument().getLength());
        // keeps the textArea up to date
        textArea.update(textArea.getGraphics());
    }
}

然后您更换标准如下:

JTextArea textArea = new JTextArea(50, 10);
PrintStream printStream = new PrintStream(new CustomOutputStream(textArea));
System.setOut(printStream);
System.setErr(printStream);

问题是所有输出只会在文本区域显示。

来源示例:http://www.codejava.net/java-se/swing/redirect-standard-output-streams-to-jtextarea

答案 2 :(得分:2)

您必须将System.out重定向到PrintStream的自定义可观察子类,以便添加到该流的每个字符或行都可以更新textArea的内容(我想,这是AWT或Swing组件)

可以使用PrintStream创建ByteArrayOutputStream实例,该实例将收集重定向的System.out

的输出

答案 3 :(得分:2)

您可以通过将System OutputStream设置为PipedOutputStream并将其连接到您读取的PipedInputStream以将文本添加到组件中来实现此方法之一,例如

PipedOutputStream pOut = new PipedOutputStream();   
System.setOut(new PrintStream(pOut));   
PipedInputStream pIn = new PipedInputStream(pOut);  
BufferedReader reader = new BufferedReader(new InputStreamReader(pIn));

你看过以下链接了吗?如果没有,那么你必须。

答案 4 :(得分:1)