Mega Code Archive

 
Categories / Java / Development Class
 

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