Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在JavasSwing应用程序的文本区域中捕获jar文件发出的控制台输出_Java_Swing_Jar - Fatal编程技术网

如何在JavasSwing应用程序的文本区域中捕获jar文件发出的控制台输出

如何在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

我想将jar文件发出的控制台消息捕获到jTestArea中

在一个单独的java应用程序中,我使用这个过程调用一个正确创建的jar文件(使用清单)。但是控制台消息没有在jTextArea中捕获。但是,System.out.println的控制台输出被正确捕获

寻求帮助


关于。

一个简单的解决方案是将输出流重新定向到
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文件,而不用使用进程创建新进程?