2013-03-20 90 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]

相关问题