Runtime - Ausführung abwarten

fsicher

Bekanntes Mitglied
Ich möchte in einem StatusBar die laufenden Aktivitäten anzeigen. Das geht gut, bis ich mit Runtime.exec ein VB-Script starte. Da Runtime offenbar ein separates Process startet, geht nach dem Start die Ausführung in der Java-Methode weiter und ich bekomme die Meldung, dass die Arbeit erledigt ist, das VB-Script ist aber weiter am Arbeiten (ein AddIn wird gestartet, der wiederum VB-Makros aufruft ...).

Java:
String[] command = { "cmd", "/c", "start", vbsFilename, fileToEdit, String.valueOf(true),
new File(addInName).getAbsolutePath(),
"my_password" };

gui.setStatusMessage("VB-Script wird ausgeführt ... ");

/* VB Script ausführen */
Process p = Runtime.getRuntime().exec(command);

int exitValue = p.waitFor();

/* Nur zur Kontrolle */
System.out.println("Exit-Value: " + exitValue);

gui.setStatusMessage("Bereit");

Laut API-Doku sollte waitFor warten, bis der Process fertig ist. Ich habe aber den Eindruck, dass die Ausführung bei mir, ohne zu warten, weiter geht.

Wie kann man das erreichen bzw. was mache ich falsch?

Danke.
 
Zuletzt bearbeitet:
Hallo.
Ich denke die Ursache, dass dein
Code:
waitFor()
nicht lange wartet liegt in dem ausgeführten Befehl:
Code:
cmd /c start ...
Das startet eine Eingabeaufforderung die für dich das VB-Skript startet. D.h. für Java wird
Code:
cmd
gestartet und das ist eben schnell fertig.
Schonmal probiert direkt das VB zu starten?
 
Ich habe jetzt einzig das Commando-Parameter geändert, und zwar von

Java:
String[] command = { "cmd", "/c", "start", vbsFilename, fileToEdit, String.valueOf(true),
new File(addInName).getAbsolutePath(),
"my_password" };

in

Java:
String[] command = { "cmd", "/c", vbsFilename, fileToEdit, String.valueOf(true),
new File(addInName).getAbsolutePath(),
"my_password" };

und, es funktioniert. Das Weglassen des Parameters "start" hat es offenbar in sich. Dass ich es verstehe, kann ich aber leider nicht sagen! :noe:
 
Ja klar, da ja mit cmd schon ein Process gestartet wird. start veranlast dabei aber die cmd selbst noch eine weitere cmd zu starten wo erst dein Command ausgeführt wird.
 

Zurück
Oben