Запустить несколько команд в Windows CMD, используя класс процесса в Java
Я использую Java-приложение для создания PDF-файла. Он записывает файл.tex, чтобы Miktex мог создать PDF.
writePDF(s);
String command = "cmd /c start xelatex -synctex=1 -interaction=nonstopmode " + s + ".tex && del " + s + ".tex";
Runtime r = Runtime.getRuntime();
p = r.exec(command);
p.waitFor();
но единственное, что происходит, - это создание textput.log со следующим содержимым:
entering extended mode
**aa.tex
! Emergency stop.
<*> aa.tex
*** (job aborted, file error in nonstop mode)
Странно то, что когда я запускаю эту команду непосредственно в Windows CMD, она работает нормально. Если я также создаю переменную "command", как это, и запускаю ее с помощью Java-приложения, то это также хорошо работает.
String command = "cmd /c start xelatex -synctex=1 -interaction=nonstopmode " + s + ".tex"
Я использую Java 8 и Miktex 2.9.7 Надеюсь, вы можете помочь
2 ответа
Итак, чтобы выполнить несколько команд в Java последовательно (не параллельно), вы можете попробовать выполнить так:
String[] commands = new String[] {"xelatex -synctex=1 -interaction=nonstopmode " + s + ".tex"
, "del " + s + ".tex"};
Runtime r = Runtime.getRuntime();
Process p;
for (String command: commands) {
p = r.exec(command);
p.waitFor();
}
Помимо того, как вызывать несколько команд, как уже сказал @Brother, вы ДОЛЖНЫ посмотреть здесь: https://www.javaworld.com/article/2071275/when-runtime-exec---won-t.html
Эта статья объясняет, как использовать Runtime.exec()
правильно, т. е. вы должны полностью использовать все выходные потоки процесса (стандартные и с ошибками).