【发布时间】:2015-06-23 01:21:44
【问题描述】:
在 Java 应用程序中,我想执行一个带有多个选项的 jar 文件。为此,我构建了一个包含所有命令元素的字符串列表,并将其传递给Runtime.exec() 方法(非常简单)。
这是带有硬编码字符串的代码(实际代码当然使用变量):
List<String> cmd = new ArrayList<String>();
cmd.add("java");
cmd.add("-Dpython.path=\"C:\\Users\\ange\\Documents\\QTaste With Spaces\\tools\\jython\\lib\\jython.jar\";\"C:\\Users\\ange\\Documents\\QTaste With Spaces\\tools\\jython\\lib\\Lib\"");
cmd.add("-cp");
cmd.add("\"C:\\Users\\ange\\Documents\\QTaste With Spaces\\tools\\jython\\lib\\..\\build\\jython-engine.jar\";\"C:\\Users\\ange\\Documents\\QTaste With Spaces\\tools\\jython\\lib\\jython.jar\";\"C:\\Users\\ange\\Documents\\QTaste With Spaces\\bin\\..\\plugins\\*\";\"C:\\Users\\ange\\Documents\\QTaste With Spaces\\bin\\..\\kernel\\target\\qtaste-kernel-deploy.jar\";testapi\\target\\qtaste-testapi-deploy.jar");
cmd.add("org.python.util.jython");
cmd.add("Testbeds\\ControlScripts\\playback.py");
cmd.add("start");
int exitCode = Runtime.getRuntime().exec(cmd.toArray(new String[cmd.size()]), env, output);
在 Windows 8 上,当我在 JAVA 应用程序中执行此操作时,出现错误:“无法找到或加载主类”。如果我直接在控制台中执行命令,它就可以工作。我认为这个错误是由于某些路径中的空格造成的,但我不明白除了用引号将所有带空格的字符串括起来之外如何做更多的事情(就像我已经做过的那样)。
当根目录包含(或不包含)空格时,此代码在 Linux 上完美运行。当根目录不包含空格时,此代码也适用于 Windows 8。
您知道如何解决这个问题吗?
【问题讨论】:
标签: java windows runtime.exec spaces