这里有点神秘,我们使用的是第三方图像服务器,该服务器在 1.6.0_45 下开始崩溃,研究确定这是由于更改为 getRuntime().exec 引起的。
1.6.0_45 的发行说明,请注意 Runtime.exec 的更改部分 http://www.oracle.com/technetwork/java/javase/6u45-relnotes-1932876.html
这些更改应该在 1.7.25 及更高版本中提供。
现在揭开谜底,下面的异常在 1.6.0_45 中抛出,但在 1.7.0_45 中却没有。该异常似乎与 exec 更改直接相关。为什么1.7.0_45 没有破解?旁注,有一个简单的解决方法,将 Java 安装到没有空格的目录中。
Exception in thread "Thread-1" java.lang.IllegalArgumentException: Executable
name has embedded quote, split the arguments
at java.lang.ProcessImpl.isQuoted(ProcessImpl.java:52)
at java.lang.ProcessImpl.getExecutablePath(ProcessImpl.java:85)
at java.lang.ProcessImpl.<init>(ProcessImpl.java:127)
at java.lang.ProcessImpl.start(ProcessImpl.java:28)
at java.lang.ProcessBuilder.start(ProcessBuilder.java:452)
at java.lang.Runtime.exec(Runtime.java:593)
at java.lang.Runtime.exec(Runtime.java:431)
at java.lang.Runtime.exec(Runtime.java:328)
at com.corda.pcagent.f.run(Unknown Source)
最佳答案
These changes were supposed to be available in 1.7.25 and later.
事实上,该更改是在 1.7.21 中引入的。
在 1.7.25 中,他们引入了一个名为 "jdk.lang.Process.allowAmbigousCommands"
的系统属性。 。如果将该属性设置为 "true"
在命令行上,它重新启用 Runtime.exec(String)
旧的(1.7.21 之前的)Windows 特定行为。 .
也许他们/某人已经为应用程序执行了此操作...这可能解释了为什么它在 1.7.45 上意外地工作。
关于java - 1.6 和 1.7 getRuntime().exec 之间的不同行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20219813/