Java Runtime.getRuntime().exec()在文件Url中有空格时不工作?

Java Runtime.getRuntime().exec()在文件Url中有空格时不工作?,java,runtime.exec,Java,Runtime.exec,我现在面临一个非常奇怪的问题。我花了两个小时来重现并得到这个错误的“解决方案” 发生这种情况: 我尝试启动另一个.jar文件,位于System.getProperty(“user.dir”)中 实际上,我用这个作为开始: Runtime.getRuntime().exec("java -jar "+System.getProperty("user.dir")+System.getProperty("file.separator")+"myJar.jar"); 如果System.getPrope

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

发生这种情况:

我尝试启动另一个.jar文件,位于
System.getProperty(“user.dir”)

实际上,我用这个作为开始:

Runtime.getRuntime().exec("java -jar "+System.getProperty("user.dir")+System.getProperty("file.separator")+"myJar.jar");
如果
System.getProperty(“user.dir”)
的外观如下所示,则此选项可以正常工作,例如:

C:\myprogram\

但是如果
System.getProperty(“user.dir”)
如下所示:

C:\My program\

这是行不通的。这很奇怪,因为没有抛出异常。 请,如果你能,如果我的解释足够清楚,你能给我一个解决这个问题的办法吗


对不起,我说的是英语,如果有什么不清楚的地方,请毫不犹豫地询问所有问题。

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

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\"");
其中,
\”
的转义字符


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

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\"");
其中,
\”
的转义字符

如果我的解释足够清楚,你能给我一个解决这个问题的办法吗

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

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" } );
现在,它不再将空间视为分隔符

运行程序时,错误将发送到错误流,并且不会触发异常。我建议您总是阅读错误流,看看可能会出现哪些错误

如果我的解释足够清楚,你能给我一个解决这个问题的办法吗

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

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" } );
现在,它不再将空间视为分隔符


运行程序时,错误将发送到错误流,并且不会触发异常。我建议您始终阅读错误流以查看可能会出现的错误。

您应将命令放入
字符串[]
中,如下所示:

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

Runtime.getRuntime().exec(command);

希望这能有所帮助。

您应该将命令放入
字符串[]
中,如下所示:

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

Runtime.getRuntime().exec(command);

希望这有帮助。

我没有硬编码路径,我是这样做的:
Runtime.getRuntime().exec(“java-jar”+System.getProperty(“user.dir”)+System.getProperty(“file.separator”)+“myJar.jar”)
@lexBay阅读了答案,我在你写评论的那一刻更新了它:):)似乎很有魅力,如果我没有遇到问题,我会做一些检查并将这个答案标记为正确。提前谢谢你!我没有硬编码路径,我是这样做的:
Runtime.getRuntime().exec(“java-jar”+System.getProperty(“user.dir”)+System.getProperty(“file.separator”)+“myJar.jar”)
@lexBay阅读了答案,我在你写评论的那一刻更新了它:):)似乎很有魅力,如果我没有遇到问题,我会做一些检查并将这个答案标记为正确。提前谢谢你!编译器说“没有为exec找到合适的方法(String,String,String),在这种情况下,请尝试
Runtime.getRuntime().exec(新字符串[]{“java”,“-jar”,System.getProperty(“user.dir”)+System.getProperty(“file.separator”)+“myJar.jar”})
@lexBay您有哪个版本的Java?我使用JDK1.7.055,我会尝试一下!编辑:是的,这种方法也很有效。非常感谢!upvotedCompiler说“没有找到适合exec的方法(字符串,字符串,字符串,字符串),在这种情况下,请尝试
Runtime.getRuntime().exec(新字符串[]{“Java”,“-jar”,System.getProperty(“user.dir”)+System.getProperty(“file.separator”)+“myJar.jar”})
@lexBay您有哪个版本的Java?我用的是jdk1.7.0_55,我会试试看!编辑:是的,这种方法也很有效。非常感谢你!向上投票