In safe environments, you can use Java to execute other
heavyweight processes (that is, programs) on your multitasking operating system. Several forms
of the exec( ) method allow you to name the program you want to run as well as its
input parameters. The
exec( ) method
returns a Process object,
which can then be used to control how your Java program interacts with this new running process. Because
Java can run on a variety of platforms and under a variety of operating systems, exec(
) is inherently environment-dependent.
The following example uses exec(
) to launch notepad,
Windows' simple text editor. Obviously, this example must be run under the Windows operating
system.
// Demonstrate exec().
class ExecDemo {
public static void main(String args[]) {
Runtime r = Runtime.getRuntime();
Process p = null;
try {
p = r.exec("notepad");
} catch (Exception e) {
System.out.println("Error executing notepad.");
}
}
}
There are several alternate forms of exec(
), but the one shown in
the example is the most common. The Process
object returned by exec(
) can be manipulated by Process' methods after the new program starts running. You can kill the
subprocess with the
destroy( ) method.
The waitFor( ) method
causes your program to wait until the subprocess finishes. The exitValue(
) method returns the
value returned by the subprocess when it is finished. This is typically 0 if no
problems occur. Here is the preceding exec(
) example modified to
wait for the running process to exit:
// Wait until notepad is terminated.
class ExecDemoFini {
public static void main(String args[]) {
Runtime r = Runtime.getRuntime();
Process p = null;
try {
p = r.exec("notepad");
p.waitFor();
} catch (Exception e) {
System.out.println("Error executing notepad.");
}
System.out.println("Notepad returned " + p.exitValue());
}
}
While a subprocess is running, you can write to and read from
its standard input and output. The getOutputStream(
) and getInputStream(
) methods return the
handles to standard in
and out
of the subprocess.
|