0

我知道以前有人问过这个问题,但没有一个解决方案对我有用。基本上我需要执行一个包含空格的命令。这是我到目前为止所拥有的:

Process p = Runtime.getRuntime().exec(new String[]{"java", "-Xms512m", "-Xmx1024m", "-cp", jars, natives, mc});   

空格来自"jars"and "natives",因为文件路径中有空格("Application Support"因为我在 Mac 上)

从我所见,这应该可以工作,但是它给了我一个NoClassDefFoundError,如果我将其复制并粘贴到终端窗口中,它就可以正常工作。空格也是这样转义的:"Application\ Support"

4

2 回答 2

0

您应该能够创建一个String来解析到Runtime其中包含空格的 。您几乎肯定需要用单引号或双引号将空格内容括起来......

这使用单引号显示它String,双引号环绕您的变量......

String command = "java -Xms512m -Xmx1024m -cp \"" + jars + "\" \"" + natives + "\" \"" + mc + "\"";
Process p = Runtime.getRuntime().exec(command);

您也可以通过在现有代码中将您的内容用双引号括起来来做到这一点......

Process p = Runtime.getRuntime().exec(new String[]{"java", "-Xms512m", "-Xmx1024m", "-cp", "\""+jars+"\"", "\""+natives+"\"", "\""+mc+"\""});

您需要在任何空白内容周围加上单引号或双引号,以便将其解释为单个值。

您还提到您收到一条NoClassDefFoundError消息 - 如果仍然是这种情况,请发布完整的堆栈跟踪,以便我们可以看到错误在抱怨什么,因为听起来可能是其他原因导致了问题。

于 2012-06-14T02:58:21.060 回答
0

使用ProcessBuilder

ProcessBuilder pb = new ProcessBuilder("java", "-Xms512m", "-Xmx1024m", "-cp", jars, natives, mc);
Process p = pb.start();

你甚至可以把它放在一行中:

Process p = new ProcessBuilder("java", "-Xms512m", "-Xmx1024m", "-cp", jars, natives, mc).start();

这应该适用于空格。

于 2013-02-26T15:14:21.053 回答