Запустить несколько команд в 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() правильно, т. е. вы должны полностью использовать все выходные потоки процесса (стандартные и с ошибками).

Другие вопросы по тегам