Hallo,
mittels Runtime.getRuntime().exec(...) möchte ich einen externen Prozess
(Windows-Plattform) starten, was soweit auch wunderbar funktioniert. Nun
jedoch stehe ich vor dem Problem, die Fortsetzung der Ausführung des
Java-Prozesses solange zu verzögern, bis der externe Prozess seine Arbeit
beendet hat, da auf die Ergebnisse des externen Prozesses zurückgegriffen
werden soll.
Zu dem Thema bin ich im Web auch fündig geworden; einer vielfach
vorgeschlagenen Lösung zufolge kann man auf die Ausgaben des externen
Prozesses schauen und so lange warten, bis nichts mehr kommt (siehe
nachfolgenden Programmausschnitt). Dumm daran ist nur, dass diese
Lösung in meinem Falle nicht zuverlässig zu funktionieren scheint. Meine
Frage also, ob es nicht noch eine andere, direktere und unbedingt
zuverlässige Lösung gibt. Überaus nett wäre es natürlich, wenn man sich
einfach eines pro.waitFor() bedienen könnte, doch scheint dies ebenfalls
nicht zu klappen.
Unter Linux habe ich mir im ansonsten identischen Fall damit beholfen,
eine Prozess-Sequenz zu initiieren, an deren erster Stelle der eigentlich
auszuführende Prozess steht, gefolgt von dem Anlegen einer Dummy-Datei;
der Java-Prozess wartet dann so lange, bis die Dummy-Datei vorliegt.
(Also etwa command_str = "name_ext_proc; touch Dummydatei").
Auch eine solche (geeignet umformulierte) Lösung scheint jedoch auf
Windows-Plattformen (hier: XP) nicht zuverlässig zu funktionieren.
Hat hier jemand noch eine Idee?
Danke und viele Grüße
Roland
mittels Runtime.getRuntime().exec(...) möchte ich einen externen Prozess
(Windows-Plattform) starten, was soweit auch wunderbar funktioniert. Nun
jedoch stehe ich vor dem Problem, die Fortsetzung der Ausführung des
Java-Prozesses solange zu verzögern, bis der externe Prozess seine Arbeit
beendet hat, da auf die Ergebnisse des externen Prozesses zurückgegriffen
werden soll.
Zu dem Thema bin ich im Web auch fündig geworden; einer vielfach
vorgeschlagenen Lösung zufolge kann man auf die Ausgaben des externen
Prozesses schauen und so lange warten, bis nichts mehr kommt (siehe
nachfolgenden Programmausschnitt). Dumm daran ist nur, dass diese
Lösung in meinem Falle nicht zuverlässig zu funktionieren scheint. Meine
Frage also, ob es nicht noch eine andere, direktere und unbedingt
zuverlässige Lösung gibt. Überaus nett wäre es natürlich, wenn man sich
einfach eines pro.waitFor() bedienen könnte, doch scheint dies ebenfalls
nicht zu klappen.
Unter Linux habe ich mir im ansonsten identischen Fall damit beholfen,
eine Prozess-Sequenz zu initiieren, an deren erster Stelle der eigentlich
auszuführende Prozess steht, gefolgt von dem Anlegen einer Dummy-Datei;
der Java-Prozess wartet dann so lange, bis die Dummy-Datei vorliegt.
(Also etwa command_str = "name_ext_proc; touch Dummydatei").
Auch eine solche (geeignet umformulierte) Lösung scheint jedoch auf
Windows-Plattformen (hier: XP) nicht zuverlässig zu funktionieren.
Hat hier jemand noch eine Idee?
Danke und viele Grüße
Roland
Code:
String[] cmddoc = { "cmd.exe", "/c", command_str };
Process pro;
String str;
try {
pro = Runtime.getRuntime().exec(cmddoc);
BufferedReader in =
new BufferedReader(new InputStreamReader(pro.getInputStream()));
// indirekte Synchronisation: Warten auf Ergebnisse des Prozesses:
while ((str = in.readLine()) != null) {
System.out.println("Warten ... " + str);
}
}
catch (IOException ioe) {
System.out.println("*** IOException ");
}