В приложении Java я хочу выполнить файл jar с несколькими параметрами. Для этого я создаю список строк со всеми элементами команды, и я передаю его методу Runtime.exec()
(это очень просто).classpath с пробелами для запуска процесса Java с помощью Runtime.getRuntime(). Exec() в Windows
Вот код с твердыми закодированными строками (Реальное использование кода переменных конечно):
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, когда корневой каталог не содержит пробелов.
У вас есть идея по устранению этой проблемы?
Я пробовал вашу идею, но она не работает. Я точно понимаю, что я заменил пробелы на «\\», чтобы избежать их (заменить на «\» не компилируется). – remy40
Вы правы, я отредактировал ответ –