Как я могу передать функцию JavaScript Методу Java для действия как обратный вызов (Носорог)

В основном я пытаюсь передать функцию JavaScript методу Java для действия как обратный вызов к сценарию.

Я могу сделать это - вид - но объект, который я получаю, является sun.org.mozilla.javascript.internal. InterpretedFunction и я не видим способ вызвать его.

Какие-либо идеи?

Вот то, что я имею до сих пор:

var someNumber = 0;

function start() {
   // log is just an log4j instance added to the Bindings
   log.info("started....");
   someNumber = 20;

    // Test is a unit test object with this method on it (taking Object as a param).
    test.callFromRhino(junk);
}

function junk() {
    log.info("called back " + someNumber);
}
9
задан sproketboy 15 May 2010 в 23:24
поделиться

2 ответа

Реализуйте интерфейс:

import javax.script.*;

public class CallBack {
  public void invoke(Runnable runnable) {
    runnable.run();
  }

  public static void main(String[] args) throws ScriptException {
    ScriptEngine js = new ScriptEngineManager().getEngineByExtension("js");
    js.getContext().setAttribute("callBack", new CallBack(),
        ScriptContext.ENGINE_SCOPE);
    js.eval("var impl = { run: function () { print('Hello, World!'); } };\n"
        + "var runnable = new java.lang.Runnable(impl);\n"
        + "callBack.invoke(runnable);\n");
  }
}
9
ответ дан 4 December 2019 в 11:04
поделиться

sun.org.mozilla.javascript.internal.InterpretedFunction реализует интерфейс sun.org.mozilla.javascript.Function .В этом интерфейсе есть метод, называемый call , который принимает:

  • a Context
  • a Scriptable для использования в качестве области
  • a Scriptable использовать в качестве значения this в функции
  • массив из объектов , которые являются аргументами функции

Итак, я предлагаю, чтобы в java вы приводите объект, который вам передали как sun.org.mozilla.javascript.Function , и вызываете call . Первые два аргумента могут быть тем, что вы использовали в java для запуска скрипта. Как вы это используете, последние два аргумента могут быть null и new Object [0] .

7
ответ дан 4 December 2019 в 11:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: