How to run a .jar file from inside another java program?

11,508

Solution 1

If you can't include the other jar,

you can use something like that

Runtime re = Runtime.getRuntime();
BufferedReader output;          
try{ 
  cmd = re.exec("java -jar MyFile.jar" + argument); 
  output =  new BufferedReader(new InputStreamReader(cmd.getInputStream()));
} catch (IOException ioe){
  ioe.printStackTrace();
}
String resultOutput = output.readLine();

I know my code isn't perfect like the catching exception, etc but I think this could give you a good idea.

Solution 2

I

Running Jar file require you to have the jar file included in your class path. This can be done at run time using URLClassLoader. Simply construct a URLClassLoader with the jar as one of the URL. Then call its forClass(...) if you know the class name (full name of course). Or inspect the manifest file using its 'findResources(String name)'.

Once you get the class, you can use reflection to get its static method main.

Seeing your question again, you know the class name, so if you are sure the jar file in already in the class path, then you can just call it as you tried.

II

To capture the output, you can call System.setOut(PrintStream out) and System.setErrPrintStream out) to change the print stream. You can pass the printstream that you create. Like this:

ByteArrayOutputStream BAOS = new ByteArrayOutputStream();
PrintStream MyOut = new PrintStream(BAOS);
System.setOut(MyOut);

// Do something to have something printed out.
...

String TheCaptured = new String(BAOS.toByteArray());

Hope this helps.

Share:
11,508
Saobi
Author by

Saobi

CS graduate student, always eager to learn new things.

Updated on June 13, 2022

Comments

  • Saobi
    Saobi almost 2 years

    i have a .jar file, which I can run on the command line:

    java -jar myFile.jar argument1
    

    I want to save the output of this .jar as a String variable inside another java program.

    How can I do it?

    I tried including myFile.jar as a reference in my program, and doing myFile.main(new String{"argument1"}) in my program. But this just prints the results to console, I can't use the results in my program.

    Hope this is not too confusing.