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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值