目录

BUG出现的背景

报错原因分析

解决方案


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>



 本次的分享就到此为止了,希望我的分享能给您带来帮助,分享不易也欢迎大家三连支持,你们的点赞就是博主更新最大的动力!如有不同意见,欢迎评论区积极讨论交流,让我们一起学习进步!有相关问题也可以私信博主,评论区和私信都会认真查看的,我们下次再见

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐