使用Java Compiler API时出现空指针异常

jav*_*eek 11 java nullpointerexception java-compiler-api

MyClass.java:

package test;
public class MyClass {
    public void myMethod(){
        System.out.println("My Method Called");
    }
}
Run Code Online (Sandbox Code Playgroud)

列出编译MyClass.java文件的SimpleCompileTest.java.

SimpleCompileTest.java:

package test;
import javax.tools.*;
public class SimpleCompileTest {
    public static void main(String[] args) {
String fileToCompile = "test" + java.io.File.separator +"MyClass.java";
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
int compilationResult = compiler.run(null, null, null, fileToCompile);
        if(compilationResult == 0){
            System.out.println("Compilation is successful");
        }else{
            System.out.println("Compilation Failed");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我正在执行SimpleCompileTest类并获得NullPointerException.ToolProvider.getSystemJavaCompiler()返回null.有人能告诉我代码有什么问题

ras*_*hid 17

我得到了同样的错误.也许我来不及回答这个问题,但我分享了自己的经验,这可能有助于其他人在未来面对同样的问题.我正在使用Compile Java Files At Runtime的源代码.

java.lang.NullPointerException提到了它.我打印出Java主目录System.out.println(System.getProperty("java.home"));,并注意到我的Eclipse指向" C:\Program Files\Java\jre7",即使我改变了我的首选项以使用JDK1.7而不是JRE1.7.

我通过设置系统属性强制使用JDK1.7找到了一种解决方法:

System.setProperty("java.home", "C:\\Program Files\\Java\\jdk1.7.0_02");
Run Code Online (Sandbox Code Playgroud)

然后我编译了我的程序,没有得到任何NullPointerException.


Jon*_*eet 16

我怀疑你遇到了这个问题 - 使用JRE而不是JDK运行代码.

运行时SimpleCompileTest,尝试显式指定您正在使用的java.exe版本作为JDK目录中的版本.