2017-01-10 78 views
0

我想從我的java程序啓動一個單獨的進程,以使用當前Java程序正在執行的相同JRE運行另一個Java程序。通常,我可以獲得java可執行文件使用System.getProperty,但java程序運行在捆綁的jre(Mac應用程序包)中,該程序實際上並不包含java可執行文件。因此,我想知道是否有任何API可以在單獨的進程中直接運行Java程序?開始使用相同的JRE運行Java程序的單獨過程JRE

回答

0

的API公共此間舉行:http://docs.oracle.com/javase/8/docs/api/

,你是從System實用工具類找缺點的信息:

所有可用的屬性將在這裏列出:http://docs.oracle.com/javase/8/docs/api/java/lang/System.html#getProperties--

目前的JVM位置通過「java.home」可用。

所以你想找的是:

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

正如我提到的,捆綁的JRE實際上不包含Java可執行文件啓動新進程 –

+0

@SimonZhu *「正如我提到的,捆綁的jre實際上並不包含java可執行文件」* - 這並不重要。該程序是在您的系統上安裝JRE的情況下啓動的,並且從java內部,此屬性**總是**指向*當前正在運行的Java安裝,系統範圍內的無記錄或特定於$ JAVA_HOME的特定於shell的指向。 –

+0

不,程序運行在捆綁的jre中,它不包含java可執行文件。換句話說,'System.getProperty(「java.home」)+「bin/java」'不存在。 –

0

這可能會給一個更好的畫面。

使用下面的獲取Java可執行文件。

System.getProperty("java.home") + "/bin/java" 

重建類路徑,

((URLClassLoader() Thread.currentThread().getContextClassLoader()).getURL() 

從這裏,你可以使用

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

正如我對蒂莫西說的,我在我的問題中提到,綁定的jre不包含可執行的java。 'System.getProperty(「java.home」)'返回的文件路徑甚至不包含'bin'文件夾。 –

相關問題