0

我在 Rhino 1.7 下用 Javascript 编写了一些脚本,其中一个启动了一个最小的 http 服务器并接受输入中的 JS 命令。

现在,如果我(从 Rhino 内部)调用:

engine = ScriptEngineManager().getEngineByName("JavaScript");

我得到了内置的 JS 引擎(来自 Java 1.6),它是 Rhino 的旧版本,并且缺少一些功能(例如用于多个接口的 JavaAdapter)。

我如何获得犀牛引擎而不是那个?我需要 ScriptEngineManager.getEngineFactories() 还是其他什么?

4

3 回答 3

1

您要实现的是选择实现“JavaScript”的脚本引擎的某个版本。正确的方法是调用ScriptEngineManager.getEngineFactories()并检查 and 的getLanguageName()结果getEngineVersion()

于 2009-11-30T15:59:44.783 回答
1

我自己发现了(反复试验)。如上所述,Rhino 没有注册引擎工厂。您可以获得当前引擎(作为上下文和可编写脚本的对象):

cx = Context.getCurrentContext();
scope = new ImporterTopLevel(cx);

通过这些对象,我可以使用 evalString/evalReader 运行我的脚本或命令行。

于 2009-12-01T11:16:06.707 回答
0

在调用您的初始脚本之前,为什么不将您正在使用的引擎设置为脚本中的上下文变量?这样,在脚本内部,您就可以访问运行它的引擎。

于 2009-11-30T14:19:46.653 回答