这里有点神秘,我们正在使用第三方图像服务器,它开始在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)
答案 0 :(得分:2)
这些更改应该在1.7.25及更高版本中可用。
事实上,这一变化是在1.7.21中引入的。
在1.7.25中,他们引入了一个名为"jdk.lang.Process.allowAmbigousCommands"
的系统属性。如果在命令行上将该属性设置为"true"
,则会为Runtime.exec(String)
重新启用旧的(1.7.21之前的)特定于Windows的行为。
也许他们/某人为应用程序做了这个...这可能解释了为什么它出乎意料地在1.7.45上工作。