Вопрос

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

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

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

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

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

Это было полезно?

Решение 2

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

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

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

Другие советы

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top