为什么 getEngineByName(“js”) 返回 null?

Ala*_* M. 7 javascript java android javax.script

无论我尝试什么,getEngineByName()总是返回 null。

这是我的代码:

final ScriptEngineManager manager = new ScriptEngineManager();
final ScriptEngine engine = manager.getEngineByName("js");
Run Code Online (Sandbox Code Playgroud)

engine在这些行之后为空。

我也尝试过:

  • getEngineByName("javascript")
  • getEngineByName("nashorn")

他们都回来了null。实际上,manager.getEngineFactories()显示一个空数组 - 意味着根本没有工厂。

这两个答案建议传递null给构造函数,但它对我不起作用:

这个答案说这是一个已修复的错误。


更新:

那是eclipse 中的Android 应用程序项目。

我不知道它与Java Project有何不同。

现在我刚刚打开一个新的Java 项目,写了这些行,我得到了一些结果:

import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
import javax.script.SimpleBindings;

public class TestClass {

    public static void main(String[] args) throws ScriptException {
        ScriptEngineManager manager = new ScriptEngineManager();
        ScriptEngine engine = scriptEngineManager.getEngineByName("js");
    }
}
Run Code Online (Sandbox Code Playgroud)

engine不为

此外,javax.script.*已成功导入,就好像它已经存在(内置)一样。这是因为我使用的是 Java 8 吗?

在之前的(android)项目中,我使用的是从这里下载的javax.script

那么Android项目中会出现什么问题以及如何解决呢?

小智 5

你必须用大写字母来写参数,如下所示:

getEngineByName("JavaScript");
                 ^   ^
Run Code Online (Sandbox Code Playgroud)