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

Java 为什么getEngineByName(“;js”;)返回null?,java,javascript,android,javax.script,Java,Javascript,Android,Javax.script,无论我尝试什么,getEngineByName()总是返回null 这是我的密码: final ScriptEngineManager manager = new ScriptEngineManager(); final ScriptEngine engine = manager.getEngineByName("js"); 但是引擎在这些行之后为空 我还尝试: getEngineByName(“javascript”) getEngineByName(“nashorn”) 它们都返回nu

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

这是我的密码:

final ScriptEngineManager manager = new ScriptEngineManager();
final ScriptEngine engine = manager.getEngineByName("js");
但是
引擎
在这些行之后为空

我还尝试:

  • getEngineByName(“javascript”)
  • getEngineByName(“nashorn”)
它们都返回
null
。实际上,
manager.getEngineFactories()
显示了一个空数组,这意味着根本没有工厂

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

并说这是一个已经修复的bug


更新:

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

我不知道它与Java项目的区别有多大

现在我刚刚打开了一个新的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");
    }
}
引擎
不是空的

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

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


那么,Android项目中的问题是什么?我该如何解决它?

您必须用大写字母书写参数,如下所示:

getEngineByName("JavaScript");
                 ^   ^

您的Java版本不包括JavaScript引擎。Java8包括Nashorn javascript引擎,通常更好地支持JavaJavaScript互操作性。对于旧版本的Java,您可以将Rhino放在类路径上并使用它。

显然,在IDE中运行时,即使您使用的是包含Nashorn javascript引擎的最新版本的Java,您也必须将
null
传递到
ScriptEngineManager
构造函数中,否则它通常没有引擎。当实际编译时,它会很好,似乎是一个IDE错误。对我来说,通过更改此代码解决了此问题:

mgr = new ScriptEngineManager();
engine = mgr.getEngineByName("JavaScript");
mgr = new ScriptEngineManager(null);
engine = mgr.getEngineByName("JavaScript");
根据本守则:

mgr = new ScriptEngineManager();
engine = mgr.getEngineByName("JavaScript");
mgr = new ScriptEngineManager(null);
engine = mgr.getEngineByName("JavaScript");

注意传递到
ScriptEngineManager
构造函数调用中的
null

查看我对
getEngineByExtension(“js”)
@和Wthompson是否有帮助,同样的问题。。。