关于Cannot invoke “javax.script.ScriptEngine.eval(String)“ because “engine“ is null的俩种解决方案
在使用ArithmeticCaptcha作为图片验证码来完成用户登录的开发中,出现了报错,报错提示空指针异常:java.lang.NullPointerException: Cannot invoke "javax.script.ScriptEngine.eval(String)" because "engine" is null,经过排查发现问题出在在JDK更新的过程中删除了原有的nashorn
目录
BUG出现的背景
在使用ArithmeticCaptcha作为图片验证码来完成用户登录的开发中,出现了报错,报错提示空指针异常:
<captcha.verion>1.6.2</captcha.verion>
<!--captcha验证码-->
<dependency>
<groupId>com.github.whvcse</groupId>
<artifactId>easy-captcha</artifactId>
<version>${captcha.verion}</version>
</dependency>
ArithmeticCaptcha captcha = new ArithmeticCaptcha(100, 50);
String code = captcha.text();
报错信息如下:
java.lang.NullPointerException: Cannot invoke "javax.script.ScriptEngine.eval(String)" because "engine" is null
报错原因分析
经过排查调试,确认业务代码层面是没什么问题的。并且这里的 "engine" 压根就没在本地代码中出现,因此怀疑是代码的环境有问题,在朋友的设备上发现jdk1.8运行同样的代码发现是没问题的,从而确定问题出在 jdk 的版本。
在查阅了大量的资料后发现在JDK升级的过程中,原本内置的 JavaScript引擎 nashorn 被移除,在Java8中还是有这个引擎的,但是到了9之后就没有了,对于笔者使用的JDK17也是没有的,因此出现报错。
解决方案
因为问题是出在没有 nashorn 这个引擎,所以只要想办法让这个引擎存在即可,经过测试,以下俩种方案都可以解决问题。
第一,更换自己的JDK版本,换至jdk1.8即可解决问题
第二,在pom.xml中引入该引擎的依赖,这样就可以不用更换JDK并且使得该引擎存在
<!--nashorn引擎依赖、JDK17中没有-->
<dependency>
<groupId>org.openjdk.nashorn</groupId>
<artifactId>nashorn-core</artifactId>
<version>15.4</version>
</dependency>
本次的分享就到此为止了,希望我的分享能给您带来帮助,分享不易也欢迎大家三连支持,你们的点赞就是博主更新最大的动力!如有不同意见,欢迎评论区积极讨论交流,让我们一起学习进步!有相关问题也可以私信博主,评论区和私信都会认真查看的,我们下次再见
更多推荐
所有评论(0)