Как вызвать метод Java из JavaScript - PullRequest
2 голосов
/ 28 января 2011

Как описано в заголовке, я пытаюсь добиться следующего:

  1. Создание объекта Java
  2. Передать в JavaScript
  3. Вызов метода (например, установщика) для переданного объекта
  4. Продолжить работу с объектом в Java

Я использую сценарии, включенные в Java. Я буду счастлив, если кто-то может помочь мне с этим.

1 Ответ

5 голосов
/ 28 января 2011

Если вы работаете с платформой ScriptEngine, это действительно просто. Вы можете «передать» объекты Java в JavaScript двумя способами:

  1. Вы можете "заполнить" среду выполнения для кода JavaScript и организовать, чтобы объекты Java просто "находились" в глобальном пространстве имен.
  2. Вы можете передавать объекты Java в качестве аргументов функциям JavaScript.

Вы также можете обращаться к Java-конструкторам из JavaScript и создавать экземпляры Java-объектов, если хотите.

Чтобы сделать первое, вам нужно настроить «привязки» для механизма сценариев. Это как карта:

final Bindings globals = engine.createBindings();
globals.put("foo", yourObject);

Теперь, когда код JavaScript запускается в этом движке, глобальный символ «foo» будет служить ссылкой на объект Java. Вы можете связать столько ссылок, сколько захотите.

Если вы хотите передать объект Java в качестве параметра функции JavaScript, первое, что вам нужно, это способ вызвать функцию JavaScript. Для этого вы используете метод invokeFunction или invokeMethod, предоставляемый интерфейсом Invocable:

final Object result = ((Invocable) engine).invokeMethod(context, methodName, arg, arg, ... );

«Контекст» - это просто ссылка на что-то, на что вы хотите this сослаться в вызываемой функции. «MethodName» - это просто строка, дающая имя вашей глобальной функции JavaScript.

Java-классы доступны для среды JavaScript через их полные пути:

var javaHashMap = new java.util.HashMap();

Это даст вам экземпляр Java HashMap в качестве переменной JavaScript.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...