2011-12-05 22 views
5

Próbowałem wyszukać odpowiedź, ale żadna nie działa dla mnie.Jak uruchomić polecenie "pdflatex" w języku Java na komputerze Mac:

Próbuję uruchomić pdflatex w terminalu z mojej aplikacji java na moim Macu.

W Terminalu gdybym wpisać:

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

otwiera yahoo.co.uk w przeglądarce FireFox

lub

pdflatex x.tex 

przetwarza plik

W moim Kod Java, który wpisuję:

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

otwiera yahoo.co.uk w przeglądarce FireFox

lub

pdflatex x.tex 

pojawia się błąd.

Oto kod:

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); 
    } 
} 

Oto błąd:

exception happened - here's what I know:
java.io.IOException: Cannot run program "pdflatex": error=2, No such file or directory at
java.lang.ProcessBuilder.start(ProcessBuilder.java:460) at
java.lang.Runtime.exec(Runtime.java:593) at
java.lang.Runtime.exec(Runtime.java:431) at
java.lang.Runtime.exec(Runtime.java:328) at
test.JavaRunCommand.main(JavaRunCommand.java:28)
Caused by: java.io.IOException: error=2, No such file or directory at
java.lang.UNIXProcess.forkAndExec(Native Method) at
java.lang.UNIXProcess.(UNIXProcess.java:53) at
java.lang.ProcessImpl.start(ProcessImpl.java:91) at
java.lang.ProcessBuilder.start(ProcessBuilder.java:453) ... 4 more

Próbowałem JProc jak to było rozwiązanie z innego wątku, ale nadal ma podobny błąd:

Exception in thread "main" org.buildobjects.process.StartupException:
Could not startup process 'pdflatex x.tex '.
at org.buildobjects.process.Proc.(Proc.java:46) at
org.buildobjects.process.ProcBuilder.run(ProcBuilder.java:111) at
test.JavaRunCommand.main(JavaRunCommand.java:20)
Caused by: java.io.IOException:
Cannot run program "pdflatex x.tex": error=2, No such file or directory at
java.lang.ProcessBuilder.start(ProcessBuilder.java:460) at
java.lang.Runtime.exec(Runtime.java:593) at
org.buildobjects.process.Proc.(Proc.java:43) ... 2 more
Caused by: java.io.IOException: error=2, No such file or directory at
java.lang.UNIXProcess.forkAndExec(Native Method) at
java.lang.UNIXProcess.(UNIXProcess.java:53) at
java.lang.ProcessImpl.start(ProcessImpl.java:91) at
java.lang.ProcessBuilder.start(ProcessBuilder.java:453) ... 4 more

+2

Spróbuj wydrukować 'which pdflatex' w linii poleceń, a następnie zastąpienie' pdflatex' w kodzie Java jego pełną nazwą. – alf

+0

Dzięki @alf! Zadziałało! ale teraz chcę otworzyć wygenerowany plik pdf. Jak wywołać pdflatex I otworzyć wynikowy plik pdf za jednym razem? –

+0

Zrobiłem to - napisałem plik wsadowy i wykonałem to. Dzięki za pomoc! :) –

Odpowiedz

2

dzięki @alf:

drukowanie which pdflatex i używanie wynikowej pełnej ścieżki działa idealnie.