当File-Url中有空格时,Runtime.getRuntime()。exec()不起作用?

时间:2014-07-11 10:28:32

标签: java runtime.exec

我现在面临一个非常奇怪的问题。我花了2个小时来重现并得到这个错误的“解决方案”。

发生这种情况:

我尝试启动位于System.getProperty("user.dir")的另一个.jar文件。

实际上,我用这个来开始:

Runtime.getRuntime().exec("java -jar "+System.getProperty("user.dir")+System.getProperty("file.separator")+"myJar.jar");

如果System.getProperty("user.dir")的内容如下所示,这样可以正常工作:

C:\MyProgramm\

但如果System.getProperty("user.dir")看起来像:

C:\My Programm\

它不起作用。很奇怪,beacuase没有异常抛出。 如果可以的话,请,如果我的解释足够明确,你能否为我解决这个问题?

对不起我的英文,如果有任何问题,请随时提出所有问题。

3 个答案:

答案 0 :(得分:2)

  

如果我的解释足够清楚,你能否为我解决这个问题?

当你为它运行一个字符串时,它希望使用空格作为分隔符,例如

java -jar C:\My Program\myJar.jar

有四个字

java
-jar
C:\My
Program\myJar.jar

简单的解决方案是不让它进行解析。

Runtime.getRuntime().exec(new String[] {
    "java", "-jar", System.getProperty("user.dir")+System.getProperty("file.separator")+"myJar.jar" } );

现在它不再将空格视为分隔符。

运行程序时,会将错误发送到错误流,并且不会触发异常。我建议你一直阅读错误流,看看你可能会遇到什么错误。

答案 1 :(得分:2)

您应将命令放在String[]中,如下所示:

String[] command = new String[]{"java","-jar",System.getProperty("user.dir")+System.getProperty("file.separator")+"myJar.jar"};

而不是使用

Runtime.getRuntime().exec(command);

希望这有帮助。

答案 2 :(得分:1)

如果路径包含空格,则必须在路径周围使用引号。

java -jar "C:\My path has spaces\my app.jar"

在您的具体案例中:

Runtime.getRuntime().exec("java -jar \""+System.getProperty("user.dir")+System.getProperty("file.separator")+"myJar.jar\"");

\""的转义字符。

Read more here about escape characters