启动单独的进程以使用相同的JRE运行Java程序

启动单独的进程以使用相同的JRE运行Java程序,java,Java,我想从我的java程序中启动一个单独的进程,使用当前java程序正在执行的同一JRE运行另一个java程序。通常,我可以使用System.getProperty获取java可执行文件的路径,但是java程序运行在一个捆绑的jre(Mac应用程序包)中,它实际上并不包含java可执行文件。因此,我想知道是否有任何API可以在单独的进程中直接运行Java程序?该API在这里是公共托管的: 以及从系统实用程序类中查找CON的信息: 此处列出了所有可用的属性: 当前JVM位置可通过“java.home”

我想从我的java程序中启动一个单独的进程,使用当前java程序正在执行的同一JRE运行另一个java程序。通常,我可以使用
System.getProperty
获取java可执行文件的路径,但是java程序运行在一个捆绑的jre(Mac应用程序包)中,它实际上并不包含java可执行文件。因此,我想知道是否有任何API可以在单独的进程中直接运行Java程序?

该API在这里是公共托管的:

以及从
系统
实用程序类中查找CON的信息:

此处列出了所有可用的属性:

当前JVM位置可通过“java.home”获得

因此,您需要的是:

 String javaPath = new File( System.getProperty("java.home"),"bin/java").absolutePath();

这可能会提供一个更好的画面

使用以下命令获取Java可执行文件

System.getProperty("java.home") + "/bin/java" 
重建类路径

((URLClassLoader() Thread.currentThread().getContextClassLoader()).getURL() 
从这里开始,您可以使用

Process.exec(javaExecutable, "-classpath", urls.join(":"), CLASS_WIH_MAIN)

上的Java版本9中的Javapackager包含bundler参数
-strip native commands
,该参数将可执行文件保留在绑定的JRE中。仅包括以下选项:

-Bstrip-native-commands=false

正如我提到的,捆绑的jre实际上并不包含javaexecutable@SimonZhu“正如我提到的,捆绑的jre实际上并不包含java可执行文件”——这无关紧要。该程序是在系统上安装了JRE后启动的,从java内部,该属性始终指向当前正在运行的java安装,而不考虑系统范围内或特定于shell的
$java_HOME
指向的位置。不,该程序在捆绑的JRE中运行,其中不包含java可执行文件。换句话说,
System.getProperty(“java.home”)+“bin/java”
不存在。@SimonZhu“不,程序在捆绑的jre中运行,它不包含java可执行文件。”这是胡说八道。无java可执行文件->无JRE消息结尾!我建议您查找嵌入式JRE。如果您愿意,您可以查看有问题的应用程序。祝你好运找到java可执行文件。正如我对Timothy说的,我在问题中提到的,捆绑的jre不包含可执行的java。
System.getProperty(“java.home”)
返回的文件路径甚至不包含
bin
文件夹。