Java脚本API无法按名称检索引擎
我试图找到已安装的带有Java脚本API的脚本引擎,但出现了一些问题 在这个演示程序中,我使用ScriptEngineManager检索工厂并列出我拥有的所有引擎。之后,我尝试按名称获取它,但结果为空Java脚本API无法按名称检索引擎,java,scripting,jython,rhino,Java,Scripting,Jython,Rhino,我试图找到已安装的带有Java脚本API的脚本引擎,但出现了一些问题 在这个演示程序中,我使用ScriptEngineManager检索工厂并列出我拥有的所有引擎。之后,我尝试按名称获取它,但结果为空 public class App { public static void main(String[] args) { ScriptEngineManager manager = new ScriptEngineManager(); List<ScriptEngineF
public class App {
public static void main(String[] args) {
ScriptEngineManager manager = new ScriptEngineManager();
List<ScriptEngineFactory> factories = manager.getEngineFactories();
for (ScriptEngineFactory factory : factories) {
System.out.println("\nName : " + factory.getEngineName());
System.out.println("Version : " + factory.getEngineVersion());
System.out.println("Language name : " + factory.getLanguageName());
System.out.println("Language version : " + factory.getLanguageVersion());
System.out.println("Extensions : " + factory.getExtensions());
System.out.println("Mime types : " + factory.getMimeTypes());
System.out.println("Names : " + factory.getNames());
ScriptEngine engine = manager.getEngineByName(factory.getEngineName());
if (engine == null) {
System.out.println("Impossible to find the engine with name " + factory.getEngineName()+"\n");
}
}
}
}
公共类应用程序{
公共静态void main(字符串[]args){
ScriptEngineManager管理器=新建ScriptEngineManager();
List factories=manager.getEngineFactorys();
用于(ScriptEngineFactory工厂:工厂){
System.out.println(“\n名称:+factory.getEngineName());
System.out.println(“版本:+factory.getEngineVersion());
System.out.println(“语言名称:+factory.getLanguageName());
System.out.println(“语言版本:+factory.getLanguageVersion());
System.out.println(“扩展:+factory.getExtensions());
System.out.println(“Mime类型:+factory.getMimeTypes());
System.out.println(“名称:“+factory.getNames());
ScriptEngine=manager.getEngineByName(factory.getEngineName());
如果(引擎==null){
System.out.println(“无法找到名为“+factory.getEngineName()+”\n”的引擎);
}
}
}
}
结果是:
版本:1.7发行版3预发行版
语言名称:ECMAScript
语文版本:1.8
扩展:[js]
Mime类型:[应用程序/javascript,应用程序/ecmascript,文本/javascript,文本/ecmascript]
名称:[js,rhino,JavaScript,JavaScript,ECMAScript,ECMAScript]
无法找到名为Mozilla Rhino的引擎
姓名:jython 版本:2.7.0 语言名称:python 语文版本:2.7 扩展:[py] Mime类型:[text/python,application/python,text/x-python,application/x-python] 名称:[python,jython] 无法找到名为jython的引擎
检查
ScriptEngineFactory
的getnames()
方法的文档:
返回ScriptEngine的不可变短名称列表,ScriptEngineManager可使用该列表标识ScriptEngine
也就是说,必须使用以下名称之一:
...
System.out.println("Names : " + factory.getNames());
ScriptEngine engine = manager.getEngineByName(factory.getNames().get(0));
...
它适用于第一个引擎Mozila Rhino,但不适用于Jython引擎,使用factory.getNames()是一个解决方案。好吧,我不明白的是,为什么它适用于一个而不适用于另一个,我应该在我的机器上安装一些东西(解释器)来让Jython工作吗?非常奇怪,对不起,我没有/使用Jython-我不知道它必须如何安装您可以尝试通过
getEngineBymetype(“text/python”)
获取引擎,也可以尝试factory.getScriptEngine()代码>。