如何在新进程中执行Jar文件并关闭原始Jar?

时间:2013-01-03 02:05:36

标签: java jar runtime execution terminate

我有2个jar文件。我想让Jar A打开Jar B然后让jar A终止,让Jar B运行。我该怎么做呢?

编辑:我的意思是我希望JarA在JVM的一个实例中打开,然后我希望JarA在JVM的新实例中执行JarB,然后JarA使用system.exit(0)

4 个答案:

答案 0 :(得分:1)

是否要启动新的JVM实例以运行其他Jar,然后终止?这并不常见。

或者,您可以将Jar B包含在类路径中,并使用它在Jar A中的代码中提供的类。

答案 1 :(得分:1)

要启动新的JVM,您可以像启动其他操作系统命令一样启动外部java进程,查看ProcessBuilder上的文档

 ProcessBuilder pb = new ProcessBuilder("java", "-classpath", "B.jar", "B.BMain");
 Process p = pb.start();

在Java中启动外部流程有很多警告,你会在SO搜索ProcessProcessBuilder

时找到很多材料

jar个文件无法运行或终止;这是jvm,例如由命令java启动。例如,当您运行以下命令时:

java -classpath A.jar A.Main

启动新的jvm并执行类main的{​​{1}}方法

现在方法A.Main可以调用Main.main()中的类方法,如果它在类路径中。例如,如果命令是

B.jar

然后在java -classpath A.jar;B.jar pkg.A 中可以有

A.Main.main

B.SomeClass.SomeMethod() 位于B

的位置

当你说“打开B.jar”时,这就是你的意思吗?请注意,这并不会“关闭”另一个“A.jar”,无论这意味着什么。

答案 2 :(得分:0)

假设,即使在阅读了下面的答案之后,你仍然想在一个单独的JVM进程中调用“JAR-B”,而这个进程没有附加到父进程“JAR-A”,你最好的选择可能就是使用类似于“cmd / start”(对于Windows)或使用“sh ...&” (对于* nix)(来自JAR-A中的Java程序)

答案 3 :(得分:0)

我有一个可能的部分答案:

因此,如果您在Windows上使用Java,则可以使用 new ProcessBuilder("java", "-classpath", "B.jar", "B.Main").inheritIO().start();

这不仅将启动该过程,还将在同一命令提示符窗口中启动它。要退出JAR A,请在创建进程B之后立即在JAR A的主要方法中添加一个System.exit(0);

对于Linux构建,我不确定,因为我在程序中遇到了相同/相似的问题。

Create a new process in Java, exit the current process

编辑:我确实在上述问题中发布了我的答案。 :)