目录

JavaCompilerjava.lang.NullPointerException报空指针异常JDK与JRE开发时区别

目录

JavaCompiler:java.lang.NullPointerException报空指针异常——JDK与JRE开发时区别

将Java文件编译成class文件时用到JavaCompiler报空指针异常。

JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();  
        StandardJavaFileManager fileMgr = compiler.getStandardFileManager(null, null, null);  
        Iterable units = fileMgr.getJavaFileObjects(fileName);  
        CompilationTask t = compiler.getTask(null, fileMgr, null, null, null, units);  
        t.call();  
        fileMgr.close();

错在:第二行compiler为null

后来发现自己引用的是jre而不是jdk,这个API需要引用到JDK里面的tools.jar文件,而jre里没有这个jar文件,在JRE里的API: JavaCompiler是由rt.jar里的tools包提供的,所以会报空指针异常。

解决方法: 把jre换成jdk即可

(如果还不行,在确认正确引入jdk后再看看是不是jdk版本过低,jdk1.8肯定是没问题的)

所以,我们平时在开发平台(如Eclipse)里引用jdk还是jre 在这里已经体现的很明显了。jdk是开发用的,jre是运行用的,jre里面的东西毕竟没有jdk全,所以 做开发,尽量引用jdk而不是jre ,不然出问题还找不到方向 。