0

クライアントとサーバー JVM があるネットワーク アプリケーションを開発しています。どちらも、同じ場所に格納されている場合と格納されていない場合があります。サーバーに接続した直後に、クライアントはその jar の MD5 Sum をサーバー上の jar と比較します。MD5 サムが一致しない場合、クライアントはサーバーの jar を新しいフォルダーにダウンロードしProcess、クライアントが現在使用しているどの jar にも依存しない新しいフォルダーを生成しようと試みてから終了します。この新しいProcessものは、クライアントが上記の新しいフォルダーに保存したサーバーからのコピーでクライアントのjarを上書きし、終了することになっています。

問題は、クライアントが新しいプロセスを起動しようとするたびに、クライアントの JVM がサイレントに終了することです。新しい を生成するコードは次のProcessとおりです。

System.err.println("##### creating ProcessBuilder ...");
ProcessBuilder pb = new ProcessBuilder();

System.err.println("##### setting command line args ...");
pb.command("java","-jar","some-jar-not-used-by-the-client.jar");

System.err.print("##### starting ProcessBuilder: ");
for(String opt : pb.command()) System.err.print(opt+" ");
System.err.println();

pb.start();
System.err.println("##### Process started, exiting host process ...");

クライアントは への呼び出しで終了しているように見えますpb.start()。私のプログラムのコンソール出力は次のとおりです。

##### creating ProcessBuilder
##### setting command line args
##### starting ProcessBuilder: java -jar some-jar-not-used-by-the-client.jar

後のprintステートメントはpb.start()決して呼び出されません。私はこれを Java 6 と Java 7 の両方でテストしましRuntime.getRuntime().exec()た。誰もこのようなものを見たことがありますか?

4

3 に答える 3

1

私はあなたの投稿を読んでいませんが、When Runtime.exec() will not - JavaWorld を読みました

于 2012-01-18T19:24:20.200 に答える
1

悲しいことに、ファーマーが指摘したバグはクローズされました

状態 11 - クローズ済み、再現不能、バグ 優先度: 4 - 低

于 2012-02-01T06:33:06.103 に答える
0

結局のところ、これは Java 1.7.0_01 (64 ビット Windows 7 Enterprise Edition で実行) のバグです。Java 1.7.0_02 に更新したところ、問題はなくなりました。Sun にバグ レポートを提出しました。レポートへのリンクは次のとおりです。

http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7131522

リンクがアクティブになるまでに 1 日か 2 日かかる場合がありますが、同じ状況にある人がこのレポートの進行状況を追跡し、それに応じて問題を解決できることを願っています。

于 2012-01-19T17:47:29.693 に答える