java - 1.6 和 1.7 getRuntime().exec 之间的不同行为

标签 java

这里有点神秘,我们使用的是第三方图像服务器,该服务器在 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/

相关文章:

java - JButton 不执行任何操作

java.lang.RuntimeException : Performing stop of activity that is not resumed in android

任务的 JavaFX 返回值

java - 如何仅为单个 HTTPURLConnection 将 “jsse.enableSNIExtension” 设置为 false?

java - Google-Eclipse插件:向项目添加入口点

java - 将数据库值检索到小程序中

java - Guava 中的不可变优先级队列

java - Hibernate不保存时间戳字段

java - OO 设计与 Java 中的静态类以及并发开发

java - Spring Boot 中的验证嵌套模型