Rhino를 사용하여 Java (android) app에 JS 코드를 포함시키고 있습니다. 나중에 Javascript에서 호출 할 Java 함수를 반환하려면 Java로 작성된 특정 함수가 필요합니다. iOS 구현과의 호환성을 유지하려면 JS 함수 변수에 저장하고 저장해야합니다. Javascript에서 JS 함수로 취급되는 Java 객체를 반환하는 방법을 알 수 없습니다. 나는 이것에 대한 답이 NativeJavaMethod를 만드는 것이라고 생각했지만, 자바 스크립트를 호출하려고 할 때 "this"포인터가 잘못되었다고 항상 말합니다. 내가 사용한 코드는 다음과 같습니다.Java 인스턴스 변수에서 Javascript 함수 저장
여기서 runnable은 Runnable이고 범위는 최상위 범위입니다. 이 일을 할 수있는 방법이 있어야합니다, 내가 뭘 잘못하고 있니? 나는 그 범위를 추측하고 있지만 그것이 무엇을 원하는지 모르겠다.
정확한 메시지 : 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)
(.. 나 또한 그렇다하더라도 변수에 runnable.run를 저장하고 자바에서 반환하는 것을 잡는 JS 변수로 실행 가능한를 작성 같은 문제를 시도)
편집 :
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
나는 그것을 반환하고있어이 그 변수를 호출하는 JS 변수에 저장 (이 기능 자체가 자바 스크립트에서 호출되었다). 그래서 var x = SomeJavaMethodThatReturnsNativeObject(); 엑스(); JS –