gpt4 book ai didi

java - 执行 JAR 并使用 InputStream 读取控制台输出 - Java

转载 作者:行者123 更新时间:2023-11-30 11:10:28 25 4
gpt4 key购买 nike

我有一个 myfile.jar 文件,我正在使用 ProcessBuilder 通过另一个 Java 程序执行该文件,并尝试使用 InputStream 读取 jar 的控制台输出,如下所示:

ProcessBuilder pb = new ProcessBuilder("java", "-jar", "myfile.jar", "arg1");
Process p = pb.start();

InputStream in = p.getInputStream();
InputStreamReader ins = new InputStreamReader(in);
BufferedReader br = new BufferedReader(ins);

String line;

while ((line = br.readLine()) != null) {
System.out.println(line);
}

p.waitFor();
p.destroy();

当我执行上面的代码时,我没有在控制台上打印任何内容。 myfile.jar 不是我自己开发的。但是当我通读 myfile.jar 的代码时,它使用 Logger 使用 ConsoleHandler 在控制台上打印。我认为这可能是问题所在。

编辑:当 java -jar myfile.jar arg1 在控制台上独立执行时,它会在控制台上打印输出。

过去 3 天这让我抓狂。解决这个问题的方向将帮助我了解更多。

最佳答案

在处理外部进程时,您不仅应该使用/监视标准输出,还应该使用标准错误。

您可以使用第二个读取器从进程中读取 stderr 流,但通常使用 ProcessBuilder#redirectErrorStream 组合流会更容易,它通过进程 InputStream 重定向 stderr。

有时进程会输出到 stderr 而不是 stdout。

即使您不使用这些流的输出,阅读它们始终是个好主意,因为如果不刷新流,某些进程可能会停止。

关于java - 执行 JAR 并使用 InputStream 读取控制台输出 - Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27684050/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com