在不同JVM中的Java桌面应用程序中执行Java main方法

在不同JVM中的Java桌面应用程序中执行Java main方法,java,jvm,Java,Jvm,我有一个桌面应用程序,当有人按下按钮时,我希望它启动另一个执行类的主方法的JVM。我的桌面应用程序已经依赖于jar,它包含我想要执行的带有main方法的类 目前我有以下代码,但是,我希望他们的代码是一种更优雅的方式: Runtime runtime = Runtime.getRuntime(); Process process = runtime.exec("java -jar another.jar"); 我知道我也可以使用ProcessBuilder 是否没有这样的方法(请原谅伪代码):

我有一个桌面应用程序,当有人按下按钮时,我希望它启动另一个执行类的主方法的JVM。我的桌面应用程序已经依赖于jar,它包含我想要执行的带有main方法的类

目前我有以下代码,但是,我希望他们的代码是一种更优雅的方式:

Runtime runtime = Runtime.getRuntime();
Process process = runtime.exec("java -jar another.jar");
我知道我也可以使用ProcessBuilder

是否没有这样的方法(请原谅伪代码):


因为我想调用的主类已经存在于我的类路径中,所以通过运行时运行
java
命令感觉很奇怪。

问得好。尝试搜索管理API:

祝你好运

我不确定这个API是否存在,但如果存在,它应该存在。
我个人使用ProcessBuilder,但通过检索当前进程的系统属性来指定java的显式路径。

HSQLDB有一个通用解决方案,用于调用多个不同进程的主要方法。使用该类调用任何进程

为什么需要在另一个JVM中执行该主类?这只会使事情复杂化

通常只有Main.Main(args)就可以了,但是:

如果您想将该程序与您的程序隔离,只需在另一个类加载器下运行它-请参阅URLClassLoader文档。请注意,即使是复杂的Java应用程序服务器也不会创建许多进程(通常只是一个JVM进程),并且只使用类加载器隔离已部署的WAR和EAR。您可能认为类加载器是JVM进程的等价物

如果另一个程序执行一些“不安全”的操作,请使用Java.security中的Java安全机制并阻止该程序执行这些操作


如果另一个程序调用System.exit(),这会停止您的程序,那么使用安全机制就足够了,并禁止该程序调用System.exit()-请参阅System.exit()Javadoc。然后您可以捕获SecurityException并忽略它。

并且您无法从代码中执行该主方法?启动新的后台线程对您来说可以接受吗?在这种情况下,您甚至可以向用户报告任务完成情况。我想要的是一个不同的jvm。启动另一个jvm没有内置方法。这是您需要的基本代码,尽管您可以进行一些调整。请参阅[这真的是从Java代码启动第二个JVM的最佳方法吗?]),了解详细信息。我相信没有办法像您建议的那样做到这一点。
Jvm.execute(Main.class);