Externe Programme und ProcessBuilder

budi

Mitglied
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:
Code:
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:
Code:
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
Code:
process.waitFor();
nicht nutzen, weil die Anwendung sonst einfriert. Woran könnte das liegen?

Danke euch.
 
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.
 
"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
Code:
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
Code:
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
Java:
new ProcessBuilder("myExecutable", "param1");
 
Zuletzt bearbeitet:

Zurück
Oben