Как запустить команду «pdflatex» в Java на Mac - PullRequest
5 голосов
/ 05 декабря 2011

Я пытался найти ответ, но никто не работает для меня.

Я пытаюсь запустить pdflatex в терминале из моего приложения java на моем Mac.

В терминале, еслия набираю:

open -a FireFox http://www.yahoo.co.uk

он открывает yahoo.co.uk в моем браузере FireFox

или

pdflatex x.tex

он обрабатывает файл

ВЯ набираю свой код Java:

open -a FireFox http://www.yahoo.co.uk'

, он открывает yahoo.co.uk в моем браузере FireFox

или

pdflatex x.tex

Я получаю ошибку.

Вот код:

public static void main(String args[]) {

    String s = null;

    try {

        Process p = Runtime.getRuntime().exec("pdflatex x.tex");

         BufferedReader stdInput = new BufferedReader(new
         InputStreamReader(p.getInputStream()));

         BufferedReader stdError = new BufferedReader(new
         InputStreamReader(p.getErrorStream()));

         // read the output from the command
         System.out.println("Here is the standard output of the command:\n");
         while ((s = stdInput.readLine()) != null) {
         System.out.println(s);
         }

         // read any errors from the attempted command
         System.out.println("Here is the standard error of the command (if any):\n");
         while ((s = stdError.readLine()) != null) {
         System.out.println(s);
         }

         System.exit(0);
    } catch (Exception e) {
        System.out.println("exception happened - here's what I know: ");
        e.printStackTrace();
        System.exit(-1);
    }
}

Вот ошибка:

возникла исключительная ситуация - вот что я знаю:
java.io.IOException: не удается запустить программу "pdflatex ": error = 2, нет такого файла или каталога в
java.lang.ProcessBuilder.start (ProcessBuilder.java:460) в
java.lang.Runtime.exec (Runtime.java:593) в
java.lang.Runtime.exec (Runtime.java:431) в
java.lang.Runtime.exec (Runtime.java:328) в
test.JavaRunCommand.main (JavaRunCommand.java:28)
Вызвано: java.io.IOException: errили = 2, нет такого файла или каталога в
java.lang.UNIXProcess.forkAndExec (собственный метод) в
java.lang.UNIXProcess. (UNIXProcess.java:53) в
java.lang.ProcessImpl.start (ProcessImpl.java:91) в
java.lang.ProcessBuilder.start (ProcessBuilder.java:453) ... еще 4

Я пробовал JProc как этобыло решением из другого поста, но оно все еще имеет похожую ошибку:

Исключение в теме "main" org.buildobjects.process.StartupException:
Не удалось запустить процесс 'pdflatex x.tex».
в org.buildobjects.process.Proc. (Proc.java:46) в
org.buildobjects.process.ProcBuilder.run (ProcBuilder.java:111) в
test.JavaRunCommand.main (JavaRunCommand).java: 20)
Причина: java.io.IOException:
Невозможно запустить программу "pdflatex x.tex": ошибка = 2, такого файла или каталога нет в
java.lang.ProcessBuilder.start(ProcessBuilder.java:460) в
java.lang.Runtime.exec (Runtime.java:593) в
org.buildobjects.process.Proc. (Proc.java:43) ... еще 2
Причина: java.io.IOException: ошибка = 2, нет такого файла или каталога в
java.lang.UNIXProcess.forkAndExec (собственный метод) в
java.lang.UNIXProcess. (UNIXProcess.java:53) в
java.lang.ProcessImpl.start (ProcessImpl.java:91) в
java.lang.ProcessBuilder.start (ProcessBuilder.java:453) ... еще 4

1 Ответ

2 голосов
/ 01 марта 2012

благодаря @alf:

печати which pdflatex и использованию полученного полного пути работает отлично.

...