# Externe Programme und ProcessBuilder



## budi (15. Jul 2010)

Hallo,

ich hätte ein paar Fragen zum ProcessBuilder bzw. zum Ausführen von externen Programmen:

Ich möchte unter Windows ein CommandLine-Tool ausführen. Das Tool benötigt ein Argument als Übergabeparameter, z.B. so:

```
c:\externTool.exe -agrument1
```

Das CommandLine-Tool gibt Ausgaben auf Stdout aus, welche ich gerne Auslesen würde und intern verarbeiten. 

Das Ausführen des CommandLine-Tools und das Auslesen der Ausgaben, habe ich soweit realisiert,
nur gibts da noch den ein oder anderen Hacken.
Beim Erzeugen des ProcessBuilder-Objekts, übergebe ich der Instanz folgende Argumente:

```
final ProcessBuilder builder = new ProcessBuilder("cmd", "/c", EXECUTABLE, ARG1);
```

Was bedeuten die Argumente?

cmd
/c
start (nutze ich nicht, aber diesen gibts auch)
Ich habe keine Doku oder ähnliches dazu gefunden. Gibt es da noch mehr?

Im Moment funktioniert alles soweit ganz gut, nur kann ich die Methode 

```
process.waitFor();
```
nicht nutzen, weil die Anwendung sonst einfriert. Woran könnte das liegen?

Danke euch.


----------



## MySelV (15. Jul 2010)

Heyho,

cmd: Ist die Konsole unter Windows. Kannst sie auch manuell über Start => Ausführen "cmd" starten
/c: Führt dein Kommando aus und beendet die Konsole


Die Methode waitFor() wartet bis dein Kommando fertig ausgeführt ist und die aktuelle Methode nimmt erst dann wieder ihre Arbeit auf.


----------



## budi (15. Jul 2010)

THX ... schonmal.

Wofür steht das Kommand "start" ??
Gibt es noch mehr solcher Kommandos??


----------



## Lexi (15. Jul 2010)

Javadoc ProcessBuilder

Hilft dir das weiter ?


----------



## Bierhumpen (15. Jul 2010)

budi hat gesagt.:


> THX ... schonmal.
> 
> Wofür steht das Kommand "start" ??
> Gibt es noch mehr solcher Kommandos??


Ja gibt es, versuch mal den hier: "help"


----------



## KrokoDiehl (15. Jul 2010)

"cmd" und "start" sind beides Windows-Befehle die u.a. Kommandos auf der Eingabeaufforderung ausführen. Was diese und ihre Parameter genau machen, kannst du entweder mit "cmd /?" erfragen oder mal Googlen...
Windows cmd Command
Windows start Command

*edit*

Nehmen wir das Beispiel

```
start winword
```
Auf der Win-Eingabeaufforderung eingegeben startet es MS-Word (sofern installiert  ). Wenn du diesen Befehl via _ProcessBuilder _absetzt, dann ist der _Process _nicht _winword_, sondern _start_! Und _start _schließt sich sofort wieder, wenn es den Befehl ausgeführt hat, was erklärt, dass dein 
	
	
	
	





```
waitFor()
```
 sofort zurückkehrt. Wenn du daher die Ausgaben des Programms lesen willst, würde ich nicht über eine "neue Konsole" gehen, sondern direkt das eigentliche Programm starten, also etwas wie 

```
new ProcessBuilder("myExecutable", "param1");
```


----------

