如何在Java中将控制台内容重定向到文本区域?
我试图在java的文本区域中获取console的内容 例如,如果我们有这个代码如何在Java中将控制台内容重定向到文本区域?,java,swing,jtextarea,Java,Swing,Jtextarea,我试图在java的文本区域中获取console的内容 例如,如果我们有这个代码 class FirstApp { public static void main (String[] args){ System.out.println("Hello World"); } } 我想将“Hello World”输出到一个textArea,我必须选择什么操作?您必须将系统重定向到PrintStream的一个自定义、可观察的子类,这样添加到该流的每个字符或行都可以更新te
class FirstApp {
public static void main (String[] args){
System.out.println("Hello World");
}
}
我想将“Hello World”输出到一个textArea,我必须选择什么操作?您必须将
系统重定向到PrintStream
的一个自定义、可观察的子类,这样添加到该流的每个字符或行都可以更新textArea的内容(我想,这是一个AWT或Swing组件)
PrintStream
实例可以使用ByteArrayOutputStream
创建,这将收集重定向的系统的输出。out
方法之一是将系统输出流
设置为管道输出流
,并将其连接到从中读取的管道输出流
,以向组件添加文本,例如
PipedOutputStream pOut = new PipedOutputStream();
System.setOut(new PrintStream(pOut));
PipedInputStream pIn = new PipedInputStream(pOut);
BufferedReader reader = new BufferedReader(new InputStreamReader(pIn));
你看过下面的链接了吗?如果没有,那么你必须
显示了一种解决方案。我找到了这个简单的解决方案:
首先,必须创建一个类来替换标准输出:
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);
问题是,所有的输出将只显示在文本区域
示例来源:这几乎是完美的,但每当控制台输出文本区域时,就会闪烁一束。使用textArea.setText(textArea.getText()+String.valueOf((char)paramInt))代替追加相反,它不会像原始的System.out
那样闪烁和流动。您可能必须使用SwingUtilities.invokeLater()才能工作。