我正在开发一个网络应用程序,其中有一个客户端和服务器JVM,两者都应该依赖于一组相同的jar,这些jars可能存储在同一个位置,也可能不存储在同一位置。连接到服务器后,客户端会立即将其 jar 的 MD5 总和与服务器上的 jar 进行比较。 如果 MD5 总和不匹配,客户端会将服务器的 jar 下载到新文件夹中,并尝试生成不依赖于客户端当前使用的任何 jar 的新Process
,然后退出。 然后,这个新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
pb.start()
之后的打印语句永远不会被调用。 我已经在Java 6和Java 7中对此进行了测试,我也尝试使用Runtime.getRuntime().exec()
,但无济于事。 以前有人见过这样的事情吗?
我还没有读过你的帖子,但读了当 Runtime.exec(( 不会 - JavaWorld
可悲的是,Farmor注意到的错误已被关闭
状态 11-已关闭,不可重现,错误 优先级:4-低
事实证明,这是Java 1.7.0_01(在64位Windows 7企业版上运行(中的一个错误。 我更新到 Java 1.7.0_02,问题消失了。 我已经向Sun提交了错误报告,这是报告的链接:
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7131522
链接可能需要一两天才能激活,但希望具有相同情况的人可以关注此报告的进度并相应地解决他们的问题。