Runtime.exec (). WaitFor () n'attend pas réellement

J'ai un code qui utilise de l'Exécution.exec() pour exécuter un externe .jar (construit comme un IzPack programme d'installation).

Si j'exécute ce external.jar à partir de la ligne de commande comme ceci:

java -jar external.jar

Puis l'invite de commande ne retourne pas de contrôle jusqu'à ce que l'application est terminée. Toutefois, si j'exécute external.jar de l'intérieur de certains de la classe java à l'aide de:

Process p = Runtime.getRuntime().exec("java -jar external.jar");
int exitCode = p.waitFor();
System.out.println("Process p returned: " + exitCode);

Puis p revient presque instantanément avec un code de réussite de 0malgré external.jar n'ayant pas encore terminé son exécution (j'ai aussi essayé via le ProcessBuilder route de fichier externe de l'exécution).

Pourquoi faut-il attendre le retour de la ligne de commande, mais pas lorsqu'il est exécuté à partir d'un autre programme java?

J'ai également mis en place 3 pots de, A, B et C où: A appelle B qui appelle C (à l'aide de Runtime.exec()), où C Thread.sleeps pendant 10 secondes, comme un simple test, et comme prévu, n'a pas retourné jusqu'à ce que 10 secondes après il fonctionne.

Je l'ai trouver c'est probablement une sorte de problème thread avec external.jar où l'exécution est en train d'être remis d'une chose à une autre, mais étant donné qu'il fonctionne directement à partir de la ligne de commande j'attend de voir le même comportement (peut-être naïvement) lorsqu'il est appelé à partir d'un autre programme java.

J'ai testé sur Windows et Ubuntu avec la version 6 de Java.

Merci!

source d'informationauteur Rhys