Java start()导致主机JVM退出

Java start()导致主机JVM退出,java,exec,processbuilder,Java,Exec,Processbuilder,我正在开发一个网络应用程序,其中有一个客户机和服务器JVM,它们都应该依赖于一组相同的JAR,这些JAR可能存储在同一个位置,也可能不存储在同一个位置。连接到服务器后,客户机立即将其JAR的MD5和与服务器上的JAR进行比较。如果MD5总和不匹配,客户端将服务器的JAR下载到一个新文件夹中,并尝试生成一个新的进程,该进程不依赖于客户端当前使用的任何JAR,然后退出。这个新的过程应该用客户端保存到abve提到的新文件夹中的服务器副本覆盖客户端的jar,然后退出 问题是,每当客户机尝试启动新进程时,

我正在开发一个网络应用程序,其中有一个客户机和服务器JVM,它们都应该依赖于一组相同的JAR,这些JAR可能存储在同一个位置,也可能不存储在同一个位置。连接到服务器后,客户机立即将其JAR的MD5和与服务器上的JAR进行比较。如果MD5总和不匹配,客户端将服务器的JAR下载到一个新文件夹中,并尝试生成一个新的
进程
,该进程不依赖于客户端当前使用的任何JAR,然后退出。这个新的
过程
应该用客户端保存到abve提到的新文件夹中的服务器副本覆盖客户端的jar,然后退出

问题是,每当客户机尝试启动新进程时,客户机的JVM都会悄悄退出。下面是生成新
进程的代码:

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()
之后的print语句永远不会被调用。我已经在Java6和Java7中对此进行了测试,并且还尝试使用
Runtime.getRuntime().exec()
,但都没有效果。以前有人见过类似的东西吗?

我没有读过你的文章,但读过之后发现,这是Java 1.7.0_01(在64位Windows 7 Enterprise Edition上运行)中的一个bug。我更新到Java1.7.002,问题就消失了。我已经向Sun提交了一份bug报告,以下是该报告的链接:


链接可能需要一两天才能激活,但希望具有相同情况的人能够关注此报告的进度并相应地解决问题。

不幸的是,Farmor注意到的错误已被关闭

状态11关闭,不可复制,错误 优先权:4-低


是的,我以前读过——那篇文章中没有一个案例与这里发生的事情有一点相似。我的父进程没有挂起或转储堆栈跟踪,它在调用ProcessBuilder.start()时立即退出。我也没有使用Runtime.getRuntime().exec(),因为官方首选的在Java中生成进程的方法是根据Java API使用ProcessBuilder。好文章!是的,我怀疑他们会这么做。我认为他们会这样想,因为你可以通过将Java更新到最新版本来解决这个问题,而他们不会在旧版本中解决这个问题。这让我有点怀疑,因为现在我必须告诉我所有的客户不要使用我的Java 1.7.0_01软件。。。哦,好吧,我想你会得到你所付出的一切……:)