Starten eines externen Programms und Programmausgabe verarbeiten
How To ...
Wie startet man ein externes Programm und erhält Zugriff auf die (Fehler-)Ausgaben des Programms?
Hintergründe
Um externe Programme auf Betriebssystemebene starten zu können, gibt es in der Klasse java.lang.Runtime die (sechsfach) überladene Methode exec(). Der Rückgabewert von exec() ist ein java.lang.Runtime-Objekt, eine Abstraktion eines Betriebssystemprozesses. Das Runtime-Objekt erlaubt mit den Methoden getInputStream(), getOutputStream() und getErrorStream() Zugriff auf die Ein- und Ausgabe, sowie die Fehlerausgabe des Programms.
So geht's
Da die (nichtgraphische) Ausgabe von Programmen eher in der UNIX-Welt verbreitet ist, versehen wir in diesem Beispiel den Aufruf des Acrobat Readers mit einer nicht vorhandenen Option, die den Acrobat Reader zur Ausgabe aller möglichen Optionen veranlasst.
public static void main(String[] args) throws Exception {
Process p = Runtime.getRuntime().exec("acroread -x test.pdf");
BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
// oder die Fehlermeldungen
//BufferedReader br = new BufferedReader(new InputStreamReader(p.getErrorStream()));
String line = null;
System.out.println("Programmausgabe");
while ( (line = br.readLine()) != null) {
System.out.println(line);
}
System.out.println("Ende der Programmausgabe");
System.out.println("Rückgabewert des Programms: " + p.waitFor());
}
Die Ausgabe des Programms (gekürzt) ist die folgende:
Programmausgabe
Usage: /usr/X11R6/bin/acroread [options] [list of files]
Options:
--display=<DISPLAY>
This option specifies the host and display to use.
--screen=<SCREEN>
X screen to use. Use this options to override the
screen part of the DISPLAY environment variable.
--sync
Make X calls synchronous. This slows down the program considerably.
.....
.....
Ende der Programmausgabe
Rückgabewert des Programms: 0
