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

Java 如何在新进程中执行Jar文件并关闭原始Jar?,java,jar,runtime,execution,terminate,Java,Jar,Runtime,Execution,Terminate,我有2个jar文件。我希望jara打开jarb,然后让jara终止,让jarb运行。我该怎么做呢 编辑:我的意思是我希望JarA在JVM的一个实例中打开,然后我希望JarA在JVM的一个新实例中执行JarB,然后JarA使用系统。退出(0)是否要启动一个新的JVM实例来运行另一个Jar,然后终止?这并不常见 或者,您可以将Jar B包含到类路径中,并使用它从Jar A中的代码中提供的类。要启动一个新的JVM,您可以像启动任何其他操作系统命令一样启动外部java进程,请在 在Java中启动外部进程

我有2个jar文件。我希望jara打开jarb,然后让jara终止,让jarb运行。我该怎么做呢


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

是否要启动一个新的JVM实例来运行另一个Jar,然后终止?这并不常见


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

要启动一个新的JVM,您可以像启动任何其他操作系统命令一样启动外部
java
进程,请在

在Java中启动外部进程有很多注意事项,您可以在这里找到很多资料,因此搜索
process
ProcessBuilder


jar
文件不运行或终止;即
jvm
,例如通过命令
java
启动。例如,运行以下命令时:

java -classpath A.jar A.Main
启动一个新的
jvm
,它执行类
A.main

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

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

 B.SomeClass.SomeMethod()
其中
B
位于
B.jar


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

假设,即使在阅读了下面的答案之后,您仍然希望在一个单独的JVM进程中调用“jar-B”,该进程未连接到父进程“jar-A”,那么您最好的选择可能是使用类似于“cmd/start”(适用于windows)的东西或使用“sh…&”(对于*nix)(来自JAR-A中的java程序)

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

因此,如果您在Windows上使用Java,那么您可以使用
newProcessBuilder(“java”、“-classpath”、“B.jar”、“B.Main”).inheritIO().start()

这不仅会启动进程,而且会在同一个命令提示窗口中启动进程。对于退出jara,包括一个
System.exit(0)

对于Linux版本,我不是很确定,因为我的程序遇到了相同/类似的问题


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

通过“Closetheoriginaljar?”可以关闭运行该Jar的JVM。但我更喜欢@gd1的“类路径”策略。我的意思是我希望JarA在JVM的一个实例中打开,然后我希望JarA在JVM的一个新实例中执行JarB,然后JarA使用system.exit(0)
 B.SomeClass.SomeMethod()