6

I've tried searching for the answer but none are working for me.

I'm trying to run pdflatex in terminal from my java application on my Mac.

In Terminal if i type:

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

it opens yahoo.co.uk in my FireFox browser

or

pdflatex x.tex

it processes the file

In my Java code I type:

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

it opens yahoo.co.uk in my FireFox browser

or

pdflatex x.tex

I get an error.

Here's the Code:

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

Here's the error:

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

I have tried JProc as it was a solution from another post, but it still has a similar error:

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

一二三
  • 21,059
  • 11
  • 65
  • 74
Devan Somaia
  • 645
  • 1
  • 8
  • 21
  • 2
    Try printing `which pdflatex` in command line, then replacing `pdflatex` in the Java code with its full name. – alf Dec 05 '11 at 10:42
  • Thanks @alf! It worked! but now I want to open the pdf file generated. How do I call pdflatex AND open the resulting pdf file in one go? – Devan Somaia Dec 05 '11 at 10:48
  • I have done it - I wrote a batch file and executed that. Thanks for your help! :) – Devan Somaia Dec 05 '11 at 11:17

1 Answers1

5

thanks to @alf :

printing which pdflatex and using the resulting full path works perfectly.

Devan Somaia
  • 645
  • 1
  • 8
  • 21