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 ,不然出问题还找不到方向 。