我正在尝试在java中的textArea中获取控制台的内容。
例如,如果我们有这个代码,
class FirstApp {
public static void main (String[] args){
System.out.println("Hello World");
}
}
我想将“Hello World”输出到textArea,我必须选择哪个actionPerformed?
答案 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)