2013-03-20 95 views
22

我試圖使用JavaCompiler進行類:ToolProvider.getSystemJavaCompiler()返回null - 僅在安裝了JRE的情況下可用?

當我打電話ToolProvider.getSystemJavaCompiler()返回null。

我認爲這是因爲我使用的是JRE而不是JDK。

問題是我希望它能夠在所有平臺上運行,而不管用戶使用JRE還是JDK的天氣。

如果有人知道如何解決這個問題,或者使用其他方法請評論。

任何幫助,將不勝感激。

+2

您可能需要JDK才能像編譯器一樣使用_development_工具...只是一個猜測。 – jahroy 2013-03-20 00:56:00

+3

小心標題。這個問題與「Java編譯器不工作」無關。 – 2013-03-20 01:03:53

+1

我認爲你應該通過@nneonneo提出問題。他(或其他人)很有可能會提出一種不同的方法(如果他們知道你想做什麼)。否則,我們可以告訴你,你目前的方法將**不工作。 – jahroy 2013-03-20 01:05:16

回答

4

我認爲這是problem。明確指定您在JDK目錄中使用的java.exe的版本。

see here的細節

+0

從這個鏈接:「_基於SDN評論,我同意如果給定的測試程序使用JRE而不是JDK運行,那麼問題可以被複制。假設這是提交者遇到的問題,我將更改關閉子狀態「不可重現」到「不是缺陷」_「 – jahroy 2013-03-20 00:57:57

+1

OP表示他不是使用JDK,而是使用JRE。您提供的鏈接指出,使用JRE時,「null」是預期的返回值。因此,該錯誤被標記爲「_不是缺陷_」。 – jahroy 2013-03-20 01:00:38

+0

那麼在這種情況下,他們無論如何是編譯一個文件在jre – 2013-03-20 01:01:25

9

ToolProvider.getSystemJavaCompiler()不可用。

是否缺少類路徑中的tools.jar?

Set class path to the tools.jar可以在jdk \ jre目錄下找到的文件。

System.setProperty("java.home", "C:\\Program Files\\Java\\jdk1.7.0_02");

+0

@ PSR-實際上我不是明確指定java.exe的版本,我只是顯示了JDK的路徑......並且這樣做肯定會起作用。 – 2013-11-29 06:44:40

4

這裏是如何運行你的應用程序的Java編譯器時,有沒有安裝JDK。

首先,從Java應用程序中包含來自JDK的tools.jar文件,並將tools.jar放入您的類路徑中。甲骨文可能不會喜歡你這樣做。但是,有法律解決方法。您可以從openjdk.org(openjdk),RedHat(IcedTea)或Azul Systems(Zulu)提供的免費JDK獲取tools.jar文件。

接下來,代替使用ToolProvider.getSystemJavaCompiler()和JavaCompiler類,直接調用位於tools.jar中的編譯器。下面是代碼段:

String classpath = ...; // make sure tools.jar is in this path 
String sourcepath = ...; // path to your sources 
String putputpath = ...; // directory for generated class files 
String filepath = ...; // file path the file you want to compile 

String[] args = new String[] { 
"-classpath", classpath, 
"-sourcepath", sourcepath, 
"-d", putputpath, 
filePath 
}; 
com.sun.tools.javac.Main javac = new com.sun.tools.javac.Main(); 
int compileStatus = javac.compile(args); 
0

這裏是簡單的解決方案,爲我工作

我只是改變了JRE系統庫..... Program Files文件\ Java \ jdk1.7.0_55 \ jre而不是.... Program Files \ Java \ jdk1.7.0_55 \ bin,它爲我工作。

1

只需複製工具。從/ lib下的jar文件 它的工作原理

您可以通過的System.out.println(System.getProperty( 「java.home」))

多數時候就像 Ç獲得:\ Program Files文件\ Java \ jre(版本)[用於windows]

相關問題