Вызов интерпретатора JavaScript из сценария - PullRequest
0 голосов
/ 30 ноября 2009

Я написал несколько скриптов на Javascript под Rhino 1.7, один из них запускает минимальный http-сервер и принимает на вход команды JS.

Теперь, если я позвоню (изнутри Rhino):

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

Я получаю встроенный движок JS (из Java 1.6), который является более старой версией Rhino и в котором отсутствуют некоторые функции (например, JavaAdapter для нескольких интерфейсов).

Как мне получить Rhino Engine вместо этого? Нужно ли ScriptEngineManager.getEngineFactories () или что еще?

Ответы [ 3 ]

1 голос
/ 30 ноября 2009

То, чего вы хотите добиться, - это выбрать определенную версию обработчика сценариев, который реализует «JavaScript». Правильный способ сделать это - позвонить ScriptEngineManager.getEngineFactories(), а затем проверить результаты getLanguageName() и getEngineVersion().

1 голос
/ 01 декабря 2009

Я выяснил это сам (методом проб и ошибок). Как отмечалось выше, Rhino не регистрирует завод по производству двигателей. Вы можете получить текущий движок (как контекст и объект сценариев):

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

С этими объектами я могу запускать свои скрипты или командные строки, используя evalString / evalReader.

0 голосов
/ 30 ноября 2009

Прежде чем вызывать ваш начальный скрипт, почему бы вам не установить движок, который вы используете в качестве переменной контекста внутри скрипта? Таким образом, внутри скрипта вы получите доступ к движку, который его запускает.

...