我在Rhino 1.7下用Javascript编写了一些脚本,其中一个启动了一个最小的http服务器并在输入中接受了JS命令。
现在,如果我打电话(来自Rhino内):
engine = ScriptEngineManager().getEngineByName("JavaScript");
我得到了内置的JS引擎(来自Java 1.6),这是Rhino的旧版本,并且缺少一些函数(比如用于多个接口的JavaAdapter)。
我如何获得Rhino Engine而不是那个?我需要ScriptEngineManager.getEngineFactories()还是其他什么?
答案 0 :(得分:1)
您想要实现的是选择实现“JavaScript”的特定版本的脚本引擎。正确的方法是拨打ScriptEngineManager.getEngineFactories()
,然后查看getLanguageName()
和getEngineVersion()
的结果。
答案 1 :(得分:1)
我自己发现了(反复试验)。如上所述,Rhino没有注册发动机工厂。您可以获取当前引擎(作为上下文和可编写脚本的对象):
cx = Context.getCurrentContext();
scope = new ImporterTopLevel(cx);
使用这些对象,我可以使用evalString / evalReader运行我的脚本或命令行。
答案 2 :(得分:0)
在调用初始脚本之前,为什么不在脚本中设置您用作上下文变量的引擎?这样,在脚本内部,您就可以访问正在运行它的引擎。