new ScriptEngineManager().getEngineByName()返回null

在引入js引擎时,本地开发环境可以返回值,但是上了生产,就一直报空指针异常,原因是
new ScriptEngineManager().getEngineByName(“javascript”)返回了null

在这里插入图片描述
于是打印日志

  ScriptEngineManager manager = new ScriptEngineManager();


            List<ScriptEngineFactory> factories = manager.getEngineFactories();


             for (ScriptEngineFactory factory: factories) {
                 System.out.printf("Name: %s%n" + factory.getEngineName(),
                         "Version: %s%n" + factory.getEngineName(),
                         "Language name: %s%n" + factory.getLanguageName(),
                         "Language version: %s%n" + factory.getLanguageVersion(),
                         "Extensions: %s%n" + factory.getExtensions(),
                         "Mime types: %s%n" + factory.getMimeTypes(),
                         "Names: %s%n", factory.getNames());
             }
            System.out.println("kangfactories"+factories);
             System.out.println("kangcalculateUtils"+calculateUtils);
            System.out.println("kangscriptEngine"+calculateUtils.scriptEngine);
            System.out.println("kangformula"+formula);

发现脚本引擎数组返回都是null。

百度或者google这样的问题,一般是jdk版本是1.6导致的,但是我生产环境是1.8。
中间有怀疑1.8的小版本不够,有过升级,还是不行在这里插入图片描述
琢磨很久,久思不通,突然想到我的生产服务是放在docker中运行,docker容器和宿主机器是隔开的,
jdk也是从docker hub上拉的镜像

然后执行命令find / -name jdk

但是这些jdk有jar包nashorn.jar缺没几个,说明我docker拉的镜像有问题 find / -name nashorn.jar
在这里插入图片描述
最后换了镜像或者直接java -jar起都可以成功了

下面是我Dockerfile拉的有问题的jre ,请避坑 :
anapsix/alpine-java:8_server-jre_unlimited
M

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
### 回答1: ScriptEngineManagerJava 语言中用于管理脚本引擎的类。它可以用来加载并使用不同类型的脚本引擎。下面是一个使用 ScriptEngineManager 的示例代码: ``` import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; public class ScriptEngineExample { public static void main(String[] args) { // 创建 ScriptEngineManager 对象 ScriptEngineManager scriptEngineManager = new ScriptEngineManager(); // 通过 ScriptEngineManager 获取 ScriptEngine 对象 ScriptEngine scriptEngine = scriptEngineManager.getEngineByName("JavaScript"); // 使用脚本引擎执行脚本 try { scriptEngine.eval("print('Hello, World!')"); } catch (Exception e) { e.printStackTrace(); } } } ``` 在这个示例代码中,我们创建了一个 ScriptEngineManager 对象,然后使用它获取了一个名为 "JavaScript" 的 ScriptEngine 对象。最后,我们使用脚本引擎执行了一个简单的脚本,输出 "Hello, World!"。 ### 回答2: ScriptEngineManager是一个Java类,是Java中调用脚本引擎的管理器类。下面是一个ScriptEngineManager的示例代码: ```java import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; import javax.script.ScriptException; public class ScriptEngineManagerExample { public static void main(String[] args) { // 创建ScriptEngineManager对象 ScriptEngineManager manager = new ScriptEngineManager(); // 获取JavaScript脚本引擎对象 ScriptEngine engine = manager.getEngineByName("JavaScript"); if (engine != null) { try { // 执行JavaScript脚本 engine.eval("var a = 10; var b = 20; var result = a + b; print(result);"); } catch (ScriptException e) { e.printStackTrace(); } } else { System.out.println("JavaScript脚本引擎不存在"); } } } ``` 该示例代码首先创建了一个ScriptEngineManager对象,然后使用`getEngineByName`方法获取了JavaScript脚本引擎对象。接着,通过调用脚本引擎对象的`eval`方法执行了一段JavaScript脚本,脚本中声明了变量a和b,并将它们相加赋值给result,最后打印出result的值。如果JavaScript脚本引擎不存在,则输出一条提示信息。 注意,该示例代码需要提前将相关的JavaScript脚本引擎库添加到Java的类路径中。 ### 回答3: ScriptEngineManagerJava 中的一个类,用于管理脚本引擎。它可以用来加载不同的脚本引擎,并提供了查找和获取已加载的脚本引擎的方法。 以下是一个 ScriptEngineManager 的示例代码: ``` import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; public class ScriptEngineManagerExample { public static void main(String[] args) { // 创建 ScriptEngineManager 对象 ScriptEngineManager manager = new ScriptEngineManager(); // 获取 JavaScript 引擎 ScriptEngine engine = manager.getEngineByName("JavaScript"); if (engine != null) { try { // 执行 JavaScript 代码 engine.eval("var message = 'Hello, world!';"); engine.eval("print(message);"); } catch (Exception e) { e.printStackTrace(); } } else { System.out.println("JavaScript 引擎未找到!"); } } } ``` 上述代码首先创建了一个 ScriptEngineManager 对象,然后通过该对象的 `getEngineByName` 方法获取 JavaScript 引擎。如果成功获取到引擎,则可以通过 `eval` 方法执行 JavaScript 代码。此处的代码创建了一个名为 `message` 的变量,并通过 `print` 方法输出其值。 需要注意的是,以上代码运行需要依赖 Java 的脚本引擎支持,如 JDK 自带的 Rhino 引擎。在运行时,如果脚本引擎未找到,则会输出提示信息。 ScriptEngineManager 的示例代码可以用来演示动态执行脚本的功能,可以方便地在 Java 程序中嵌入脚本逻辑,实现更加灵活的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值