Runtime.exec() を使用して外部の .jar (IzPack インストーラーとしてビルド) を実行するコードがあります。
コマンドラインからこの external.jar を実行すると、次のようになります。
java -jar external.jar
その後、コマンド プロンプトは、アプリケーションが終了するまで制御を返しません。ただし、次を使用して、一部のJavaクラス内からexternal.jarを実行すると:
Process p = Runtime.getRuntime().exec("java -jar external.jar");
int exitCode = p.waitFor();
System.out.println("Process p returned: " + exitCode);
次に、external.jar がまだ実行を完了していないにもかかわらずp
、成功コード でほぼ瞬時に戻ります(外部ファイル実行のルートを介してこれも試しました)。0
ProcessBuilder
コマンドラインから戻るのを待つのに、別の Java プログラム内から実行するときは待たないのはなぜですか?
また、簡単なテストとして、A がC を呼び出す B を呼び出す A、B、および C の 3 つの jar をセットアップしました ( を使用Runtime.exec()
)。Thread.sleep
それは実行されます。
これはおそらく、あるものから別のものに実行が引き継がれる external.jar のスレッド化の問題の一種だと思いますが、コマンドラインから直接動作することを考えると、同じ動作が見られると予想していました (おそらく素朴に)別の Java プログラム内から呼び出された場合。
Java 6 を使用する Windows と Ubuntu でこれをテストしました。
ありがとう!