如何在JavasSwing应用程序的文本区域中捕获jar文件发出的控制台输出
我想将jar文件发出的控制台消息捕获到jTestArea中 在一个单独的java应用程序中,我使用这个过程调用一个正确创建的jar文件(使用清单)。但是控制台消息没有在jTextArea中捕获。但是,System.out.println的控制台输出被正确捕获 寻求帮助如何在JavasSwing应用程序的文本区域中捕获jar文件发出的控制台输出,java,swing,jar,Java,Swing,Jar,我想将jar文件发出的控制台消息捕获到jTestArea中 在一个单独的java应用程序中,我使用这个过程调用一个正确创建的jar文件(使用清单)。但是控制台消息没有在jTextArea中捕获。但是,System.out.println的控制台输出被正确捕获 寻求帮助 关于。一个简单的解决方案是将输出流重新定向到JTextArea: JTextArea log = new JTextArea(); PrintStream printStream = new PrintStream(new Cus
关于。一个简单的解决方案是将输出流重新定向到
JTextArea
:
JTextArea log = new JTextArea();
PrintStream printStream = new PrintStream(new CustomOutputStream(log));
System.setOut(printStream);
System.setErr(printStream);
如果要将原始输出流重新定向回控制台,则应保留对原始输出流的引用,但是:
PrintStream standardOut = System.out;
PrintStream standardErr = System.err;
以及CustomOutputStream
的简单实现:
public class CustomOutputStream extends OutputStream {
private JTextArea textArea;
public CustomOutputStream(JTextArea textArea) {
this.textArea = textArea;
}
@Override
public void write(int b) throws IOException {
textArea.append(String.valueOf((char)b));
textArea.setCaretPosition(textArea.getDocument().getLength());
}
}
尽管您应该知道,
System.out.println()
是缓冲的,因此您的输出可能不会按照您的意愿尽快显示。非常感谢。我是Java新手,无法在main()函数中演示如何将这个小应用程序与jar文件合并。你也能用main()函数帮我写完整的代码吗?@sameeroak在我的答案中的网页链接中有一个小的示例程序。在我把问题发布到这里之前,我参考了同样的程序。但问题是,当美国农业部在同一代码中公布S.o.p时,代码运行得非常完美。我有一个jar文件,我正在通过另一个应用程序调用它。所有S.o.p都工作正常,并将输出发送到textarea。但是,我正在使用的jar的控制台输出没有被发送到textarea。我想我已经发现了问题。我正在使用进程来执行jar文件。若我错了,请纠正我,但似乎并没有其他方法能比为此目的使用流程更好。因为它是一个新的进程,所以创建的textarea不在其进程空间中。有没有一种方法可以在同一主进程中执行jar文件,而不用使用进程创建新进程?