在Java應用程序中,我想執行一個帶有多個選項的jar文件。爲此,我創建了一個包含所有命令元素的字符串列表,並將其傳遞給Runtime.exec()
方法(這非常簡單)。使用Runtime.getRuntime()在Windows上啓動Java進程的空間的類路徑。在Windows上執行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根目錄包含(或不包含)空格時,此代碼完美適用於Linux。當根目錄不包含空格時,此代碼也適用於Windows 8。
你對如何解決這個問題有想法嗎?
我試過你的想法,但它不起作用。我確切地說,我已經用「\\」替換了空格以便將它們轉義(用「\」替換爲不編譯)。 – remy40
你說得對,我已經編輯了答案 –