Я использую Rhino для встраивания JS-кода в приложение Java (android). Мне нужна определенная функция, написанная на Java, чтобы вернуть функцию Java, которая будет вызываться позже Javascript. Чтобы поддерживать совместимость с реализацией iOS, это необходимо сохранить и сохранить в переменной функции JS. Я не могу понять, как вернуть объект Java, который рассматривается как функция JS из Javascript. Я думал, что ответом на это будет создание NativeJavaMethod, но когда я пытаюсь вызвать его в Javascript, он всегда говорит, что этот «указатель» неверен. Код, который я использовал, был:Хранение функции Javascript из переменной экземпляра Java
NativeJavaMethod("", runnable.getClass().getMethod("run"), scope);
В тех случаях, когда runnable является Runnable, а scope - областью верхнего уровня. Должен быть способ сделать это, что я делаю неправильно? Я догадываюсь об этом, но я не знаю, чего он там хочет.
Точное сообщение: org.mozilla.javascript.EvaluatorException: Java method "run" was invoked with [object Object] as "this" value that can not be converted to Java type java.lang.Runnable. (#1)
(.. Кроме того, я даже пытался написания работоспособной в переменную JS затем хранить runnable.run в переменной и захвата, что с Java, чтобы вернуть такую же проблему)
Редактировать :
NativeJavaMethod возвращается из функции Java вызывающему (который написан на JavaScript), сохраняется в переменной, а затем выполняется. Таким образом, в JS
var x=myobject.makeFunction(); //makeFunction is in Java, is properly called and returns the NativeJavaMethod
x(); //This throws the above exception
Я возвращаю его (сама эта функция вызывается из Javascript) хранить его в переменной JS, то вызов этой переменной. поэтому var x = SomeJavaMethodThatReturnsNativeObject(); Икс(); в JS –