Question:
Is it possible to launch another application from aJava application (not an applet)?
Answer:
Yes. There are two classes of interest for performingsystem level functions such as this:
java.lang.Runtime
and java.lang.Process
.The Runtime class provides several flavors of the exec()
method, which takes a command and executes it by creating a separate processusingfacilities provided by the OS you’re running on:
public Processexec(String command); public Process exec(String command, String envp[]); public Process exec(String cmdarray[]); public Process exec(String cmdarray[], String envp[]);
exec()
returns an instance of a Process which can then be used bythe Java application to interact with the launched program, waitfor it to finish, and so on.The only tricky part in accomplishing this is getting hold of aRuntime object with which to call exec()
. To get an instance ofa Runtime object, call:
This method returns a static Runtime object similar toRuntime.getRuntime()
System.out
,which is guaranteed to exist for every invocation of the program.The following program demonstrates how to use these classes to launch anapplication from a Java program. It takes a command line as itsargument and simply executes it as if the user had invoked it. Notethat the program captures the output of the launched application bygetting an InputStream
from the running Process and readingfrom it as if it were a normal stream.
import java.io.*;public class CmdExec { public CmdExec(String cmdline) { try { String line; Process p = Runtime.getRuntime().exec(cmdline); DataInputStream input = new DataInputStream( p.getInputStream()); while ((line = input.readLine()) != null) { System.out.println(line); } input.close(); } catch (Exception err) { System.out.println(“EXEC failed: ” + err.toString()); err.printStackTrace(); } } public static void main(String argv[]) { new CmdExec(argv[0]); }}