1

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

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

4

4 回答 4

1

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

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

于 2013-01-03T02:15:52.547 回答
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该类的方法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”,无论这可能意味着什么。

于 2013-01-03T02:26:01.360 回答
0

假设,即使在阅读了以下答案之后,您仍然想在未附加到父进程“JAR-A”的单独 JVM 进程中调用“JAR-B”,那么最好的选择可能是使用类似于“cmd / start”(对于 Windows)或使用 'sh ... &'(对于 *nix)(来自 JAR-A 中的 java 程序)

于 2013-01-03T02:34:44.293 回答
0

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

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

这不仅会启动进程,还会在同一个命令提示符窗口中启动它。要退出 JAR A,请System.exit(0);在创建进程 B 后立即在 JAR A 的 main 方法中包含 a。

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

在Java中创建一个新进程,退出当前进程

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

于 2020-07-26T16:04:05.927 回答