Warten auf Beendigung eines externen Prozesses

Status
Nicht offen für weitere Antworten.

RolandS

Mitglied
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

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 ");
		}
 

tfa

Top Contributor
Objekte der Klasse Process kennen die Methode waitFor(). Probier die mal.
Außerdem könntest du statt Runtime den ProcessBuilder (ab Java 5) benutzen.
 

RolandS

Mitglied
tfa hat gesagt.:
Objekte der Klasse Process kennen die Methode waitFor(). Probier die mal.
Außerdem könntest du statt Runtime den ProcessBuilder (ab Java 5) benutzen.

Ich habe deine Empfehlung waitFor() zum Anlass genommen, noch einmal
einen genaueren Blick auf den Ablauf des externen Prozesses zu werfen, und herausgefunden,
dass dieser nicht terminiert, insofern man ihn mit zu viel Input füttert. (Näherungsweise
gesprochen dient der externe Prozess zur Abarbeitung einer Puffer-Datei; fällt letztere
zu umfangreich aus, führt dies dazu, dass der ext. Prozess nicht terminiert, was ein Blick
in den TaskManager offenbarte.) Schieße ich den Prozess dann per Hand ab, setzt das
Java-Programm tatsächlich seine Verarbeitung fort.

Somit: Problem in der ursprünglich beschriebenen Form gegenstandslos.
Sowohl die waitFor()- als auch die pro.getInputStream()-Lösung funktioniert somit
einwandfrei. Ich muss nun eben schauen, wie ich den externen Prozess zum
ordnungsgemäßen Terminieren bringe, aber dies ist eine andere Geschichte.

Nachfolgend nochmals der entsprechende Programmausschnitt mit der
zu bevorzugenden waitFor()-Lösung.

Dank und Gruß

Roland

Code:
pro = Runtime.getRuntime().exec(cmddoc);
		    try {
			pro.waitFor();
		    }
		    catch (Exception e) {}
 

lhein

Top Contributor
RolandS hat gesagt.:
Code:
pro = Runtime.getRuntime().exec(cmddoc);
		    try {
			pro.waitFor();
		    }
		    catch (Exception e) {}

Bitte keine leeren catch-Blöcke...damit machst Du Dir nur selber das Leben schwer, wenn mal Probleme auftreten.

lhe
 

RolandS

Mitglied
lhe hat gesagt.:
RolandS hat gesagt.:
Code:
pro = Runtime.getRuntime().exec(cmddoc);
		    try {
			pro.waitFor();
		    }
		    catch (Exception e) {}

Bitte keine leeren catch-Blöcke...damit machst Du Dir nur selber das Leben schwer, wenn mal Probleme auftreten.

lhe

Keine Angst!
Sieht im Programm natürlich anders aus,
es möge jeder selbst in den catch-Block einfügen, womit sie/er am glücklichsten werde!
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Warten bis cmd Prozess fertig ist Allgemeine Java-Themen 2
M Warten vor OnClickListener Allgemeine Java-Themen 2
B Threads Multithreading Threads sollen warten Allgemeine Java-Themen 12
KaffeeFan Methoden Suche Methode um Programm kurz warten zu lassen Allgemeine Java-Themen 22
M Warten bis Variabel nicht null ist Allgemeine Java-Themen 18
chuxXo Warten auf BasicPlayer - JavaZOOM SoundAPI Allgemeine Java-Themen 8
J Java Auf anderes Programm warten Allgemeine Java-Themen 9
W Threads Threads warten lassen Allgemeine Java-Themen 5
D Simpler Timer zum warten Allgemeine Java-Themen 19
B Threads Main Thread warten auf abgebrochen Task warten lassen Allgemeine Java-Themen 25
das-mo Warten auf Event Allgemeine Java-Themen 7
L Im Thread auf Eingaben warten Allgemeine Java-Themen 3
frankred Threads Auf eine Gruppe von Threads warten Allgemeine Java-Themen 11
S Warten, bis ein Impuls von außen kommt. Allgemeine Java-Themen 2
A Warten auf shellscript Allgemeine Java-Themen 3
K Warten bis Datei geändert Allgemeine Java-Themen 2
R Programm soll warten bis eine Passwort eingabe gemacht wurde. Allgemeine Java-Themen 6
KrokoDiehl Desktop.open() und warten? Allgemeine Java-Themen 3
Guybrush Threepwood Warten, bis keine Taste gedrückt Allgemeine Java-Themen 11
H auf Methode warten Allgemeine Java-Themen 2
F thread warten lassen Allgemeine Java-Themen 2
N "Bitte warten"-Meldung Allgemeine Java-Themen 6
P Swing Eine Sekunde warten (Timer) Allgemeine Java-Themen 7
kodela Warten mit Java Allgemeine Java-Themen 5
L Warten bei mehreren Threads, bis Ende erreicht ist Allgemeine Java-Themen 2
S Threads eines Pools aufeinander warten lassen Allgemeine Java-Themen 11
J Main-Thread soll auf alleKinder Threads warten Allgemeine Java-Themen 5
MQue auf gestarteten Process warten Allgemeine Java-Themen 7
M Auf Einträge im Buffer warten Allgemeine Java-Themen 7
M In der GUI / im Model auf Webrequest warten? Allgemeine Java-Themen 4
G Auf den Start eines Threads warten? Allgemeine Java-Themen 4
M Auf Thread warten Allgemeine Java-Themen 5
G Warten? Allgemeine Java-Themen 3
B Programm soll auf die Eingabe vom Mouselistener warten. Allgemeine Java-Themen 19
C Java Parameter zum starten ohne auf Programmende zu warten Allgemeine Java-Themen 4
M Methode soll warten, bis Button gedrückt Allgemeine Java-Themen 2
P Warten auf ein Ereignis Allgemeine Java-Themen 7
R Thread beenden und warten, bis er fertig ist Allgemeine Java-Themen 4
K Warten auf die Eingabe aus Fenster.... Allgemeine Java-Themen 2
O Warten bis alle gestarteten Threads beendet sind? Allgemeine Java-Themen 6
Q Methode soll auf schließen eines Frames warten Allgemeine Java-Themen 4
S methode stoppen / auf ein event warten Allgemeine Java-Themen 5
J x Sekunden warten, dann Kommando ausführen Allgemeine Java-Themen 8
B Thread soll auf Event warten, dann Daten an Klasse senden Allgemeine Java-Themen 2
R Thread soll auf MouseClick warten Allgemeine Java-Themen 2
W Warten bis gestartetes Programm beendet wird Allgemeine Java-Themen 2
D Warten auf Dateien aus externem Programm Allgemeine Java-Themen 3
D commapi lesen, auf zeichen warten. Allgemeine Java-Themen 2
sliwalker Threads: Kann man auf anonyme Threads warten? Allgemeine Java-Themen 2
S Datei endlos einlesen (am Dateiende warten) Allgemeine Java-Themen 3
N auf java 1.5 (tiger) warten? Allgemeine Java-Themen 4
chuxXo BasicPlayer - Beendigung Abfragen (Allgemein) Allgemeine Java-Themen 21
C Swing Focus nach Beendigung eines Modal-JDialogs Allgemeine Java-Themen 5
A Runtime.getRuntime().exec mit Warte auf Beendigung - Wie? Allgemeine Java-Themen 7
O regulärer Ausdruck zum durchsuchen eines Strings verwenden Allgemeine Java-Themen 2
T Rotationswinkel eines Bildes bestimmen Allgemeine Java-Themen 4
C Probleme beim Erstellen eines runnable-jar files Allgemeine Java-Themen 1
J JavaScript innerhalb eines Java Projekts ausführen Allgemeine Java-Themen 2
Encera Größe eines Objektes in Byte berechnen Allgemeine Java-Themen 2
8u3631984 Prüfen ob min. ein Element eines Sets in einem anderen Set enh Allgemeine Java-Themen 4
M Array Rang eines Elements Allgemeine Java-Themen 4
OnDemand Teile eines Links entfernen Allgemeine Java-Themen 6
H Auslesen eines (LDAP-)Attributs in Active Directory Allgemeine Java-Themen 2
W JSON parsen eines ,mit JS.stringify erstellten Strings Allgemeine Java-Themen 27
H Textposition eines gedrehten Textes verschieben Allgemeine Java-Themen 8
berserkerdq2 run-methode eines Threads so programmieren, dass 30x die Sekunde etwas ausgeführt wird. Allgemeine Java-Themen 44
E Ersetzen eines Bildes in der Kopfzeile eines Word-Docx-Dokuments mit Apache POI XWPF Allgemeine Java-Themen 0
N Fahrtrichtung eines selbstfahrenden Auto ändern Allgemeine Java-Themen 3
T Letztes Zeichen eines Strings enfernen Allgemeine Java-Themen 14
S Übergabe eines Sortierkriteriums für ein Artikel Array mittels BiPredicate<Artikel, Artikel> Allgemeine Java-Themen 13
gotzi242 Schatzsuche mithilfe eines O(log n) Algorithmus Allgemeine Java-Themen 2
C Koordinaten LONG/LAT eines neuen Punktes in bestimmter Entfernen und Winkel berechnen Allgemeine Java-Themen 3
Tobero Meine Funktion für das beinhalten eines Punktes in einem Kreis funktioniert nicht Allgemeine Java-Themen 5
LimDul Direktes return eines Array geht nicht Allgemeine Java-Themen 20
S Mittelwert anhand eines Stream berechnen Allgemeine Java-Themen 5
kodela Breite eines erweiterten Monitors feststellen Allgemeine Java-Themen 5
R Zeilen eines 2d Arrays abwechselnd links und rechts mit Nullen auffüllen Allgemeine Java-Themen 14
Zrebna Alternative Darstellung eines Codesnippets Allgemeine Java-Themen 33
kodela Inhalt eines Arrays ändert sich mysteriös Allgemeine Java-Themen 2
bueseb84 Wget mit Wildcards - oder wie lädt man bei JFrog die letzte Version eines Artifacts herunter Allgemeine Java-Themen 3
N Erkennen eines Programs Allgemeine Java-Themen 2
N Pausieren eines Programmes Allgemeine Java-Themen 4
D Input/Output Implementierung eines CommandHandlers/Parsers für viele Eingaben Allgemeine Java-Themen 26
M Gibt es eine API die den aktuellen Wert eines Indikators beim Trading zurückgibt? Allgemeine Java-Themen 7
F Wie bekommt man alle Filenamen eines Webserver Verzeichnisses Allgemeine Java-Themen 6
A Fehler beim Öffnen eines Projekts Allgemeine Java-Themen 6
N Eigenschaften eines Buttons per Setter verändern Allgemeine Java-Themen 5
S Ausfuehrung eines Programms aufzeichnen..? Allgemeine Java-Themen 4
X Ermittlung eines doppelte Paars mit Streams Allgemeine Java-Themen 50
Stonie Prüfen von direkter Implementierung eines Interfaces Allgemeine Java-Themen 7
S Vorbereitung eines Praktikums Allgemeine Java-Themen 4
H Aufruf eines Web Service anhand übergebenen Parameter Allgemeine Java-Themen 2
M Weiterleiten von empfangenen Nachrichten eines StompSessionHandlers Allgemeine Java-Themen 1
J Programm zum Suchen eines Wortes im Dateisystem Allgemeine Java-Themen 4
H Rename eines Projekts Allgemeine Java-Themen 1
J Fenstergröße eines anderen Programmes auslesen Allgemeine Java-Themen 9
ReinerCoder auf Klassen innerhalb eines package zugreifen Allgemeine Java-Themen 22
Meeresgott Erste Schritte Sourcetree - Git | Suchen eines Commits Allgemeine Java-Themen 2
E Status eines USB Mikrofon abfragen Allgemeine Java-Themen 2
DaCrazyJavaExpert OOP Ansätze und Tipps zum Porgrammieren eines Taschenrechners Allgemeine Java-Themen 25

Ähnliche Java Themen

Neue Themen


Oben