How to execute a program from within Java
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
import java.net.*;
import java.util.*;
/**
* ExecDemoNS shows how to execute a program from within Java.
*/
public class ExecDemoNS extends JFrame {
/** The name of the help file. */
protected final static String HELPFILE = "./help/index.html";
/** A stack of process objects; each entry tracks one external running process */
Stack<Process> pStack = new Stack<Process>();
/** main - instantiate and run */
public static void main(String av[]) throws Exception {
String program = av.length == 0 ? "netscape" : av[0];
new ExecDemoNS(program).setVisible(true);
}
/** The path to the binary executable that we will run */
protected static String program;
/** Constructor - set up strings and things. */
public ExecDemoNS(String prog) {
super("ExecDemo: " + prog);
String osname = System.getProperty("os.name");
if (osname == null)
throw new IllegalArgumentException("no os.name");
if (prog.equals("netscape"))
program = // Windows or UNIX only for now, sorry Mac fans
(osname.toLowerCase().indexOf("windows")!=-1) ?
"c:/program files/netscape/communicator/program/netscape.exe" :
"/usr/local/netscape/netscape";
else
program = prog;
Container cp = getContentPane();
cp.setLayout(new FlowLayout());
JButton b;
cp.add(b=new JButton("Exec"));
b.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
runProg();
}
});
cp.add(b=new JButton("Wait"));
b.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
doWait();
}
});
cp.add(b=new JButton("Exit"));
b.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
System.exit(0);
}
});
pack();
}
/** Start the help, in its own Thread. */
public void runProg() {
new Thread() {
public void run() {
try {
// Get the URL for the Help File
URL helpURL = this.getClass().getClassLoader().
getResource(HELPFILE);
// Start Netscape from the Java Application.
pStack.push(Runtime.getRuntime().exec(program + " " + helpURL));
} catch (Exception ex) {
JOptionPane.showMessageDialog(ExecDemoNS.this,
"Error" + ex, "Error",
JOptionPane.ERROR_MESSAGE);
}
}
}.start();
}
public void doWait() {
if (pStack.size() == 0) return;
try {
pStack.peek().waitFor();
// wait for process to complete (does not work as expected for Windows programs)
} catch (Exception ex) {
JOptionPane.showMessageDialog(this,
"Error" + ex, "Error",
JOptionPane.ERROR_MESSAGE);
}
pStack.pop();
}
}
Related examples in the same category