gpt4 book ai didi

Java - Runtime.exec() 无法运行

转载 作者:行者123 更新时间:2023-11-30 02:00:15 26 4
gpt4 key购买 nike

当我尝试运行任何 Runtime.exec() 命令(例如这个简单的命令)来打印 java 版本时:

String [] cmd = { "java", "-version" };
Runtime runtime = Runtime.getRuntime();
Process process = runtime.exec(cmd);

BufferedReader stdError = new BufferedReader( new InputStreamReader( process.getErrorStream() ) );
String s = null;

while ( ( s = stdError.readLine() ) != null )
System.out.println(s);

它工作得很好,但如果我使用与我的 Java 应用程序 bundle 在一起的 JRE,我总是会收到错误消息,指出 java 是未知的:

java.io.IOException: Cannot run program "java": error=2, No such file or directory
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
at java.lang.Runtime.exec(Runtime.java:620)
at java.lang.Runtime.exec(Runtime.java:450)
at java.lang.Runtime.exec(Runtime.java:347)
at org.runner.Runner.main(Runner.java:11)

为什么使用 bundle 的 JRE 时会发生这种情况?

最佳答案

经过大量调查,我能够解决这个问题。我将在这里添加我的工作解决方案,也许它会帮助遇到相同问题的人:

此问题是由于报告的 JDK bug 引起的: https://bugs.java.com/view_bug.do?bug_id=5049299

由于我在 Mac OS X 上遇到了这个问题,因此通过设置 Java 系统属性来使用“fork”而不是“posix_spawn”对我来说是安全的:

if( isMacOSX() ) System.setProperty( "jdk.lang.Process.launchMechanism", "FORK" );

这可能是一个令人沮丧的解决方案,但它确实解决了我在 Mac OS X 上的一个巨大问题。

关于Java - Runtime.exec() 无法运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53113127/

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