package javacodebook.io.startextern; import java.io.*; /** * Externe Programme können von Java aus gestartet werden. Dabei ist es * möglich, ein Programm zu starten, die Ausgaben abzufangen und auf das * Ende der Programmausführung zu warten. */ public class ProgramController { /* * Ein externes Programm wird gestartet, ohne weitere Kontrolle darüber * auszuüben. Dies kann z.B. der Aufruf des Browsers sein, um eine * HTML-Datei anzuzeigen. */ public static void startProgram(String command) throws IOException { Runtime runtime = Runtime.getRuntime(); runtime.exec(command); } /* * Ein externes Programm wird gestartet. Anschliessend wird auf das * Ende der Ausführung gewartet. */ public static int startAndWaitForProgram(String command) throws IOException { Runtime runtime = Runtime.getRuntime(); Process p = runtime.exec(command); try { p.waitFor(); } catch(InterruptedException e) { return -1; } return p.exitValue(); } /* * Ein externes Programm wird gestartet, die Ausgabe wird abgefangen und * in die Standardausgabe geschrieben. */ public static int startProgramAndWriteOutput(String command) throws IOException { Runtime runtime = Runtime.getRuntime(); Process p = runtime.exec(command); BufferedReader brstdout = new BufferedReader( new InputStreamReader(p.getInputStream())); StringBuffer buffer = new StringBuffer(); String line = ""; while((line = brstdout.readLine()) != null) { System.out.println(line); } try { p.waitFor(); } catch(InterruptedException e) { return -1; } return p.exitValue(); } } --- Neue Klasse --- package javacodebook.io.startextern; import java.io.*; /** * Diese Klasse zeigt die verschiedenen Möglichkeiten, Programme zu * starten. */ public class Starter { public static void main(String[] args) throws IOException{ String command = "explorer"; if(args.length > 0) command = args[0]; //Programm einfach nur starten ProgramController.startProgram(command); command = "jar -cf c:\\book.jar c:\\java\\projekte\\book"; if(args.length > 1) command = args[1]; //Programm starten und Ausführung abwarten int retValue = ProgramController.startAndWaitForProgram(command); System.out.println("Rückgabewert: " + retValue); command = "jar -cfv c:\\book.jar c:\\java\\projekte\\book"; if(args.length > 2) command = args[2]; //Programm starten, Ausgaben abfangen und Ausführung abwarten retValue = ProgramController.startProgramAndWriteOutput(command); System.out.println("Rückgabewert: " + retValue); } }