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
传递给构造函数,但对我来说不起作用:
更新: 那是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是否有帮助,同样的问题。。。