2

我正在使用 javax.script 将 javascript 代码嵌入到 Java 方法中。

在我的项目中,javascript 负责通过 websocket 发送异步 http 请求。收到响应后,我需要执行回调函数。

我想调用一个用 Java 编写的方法作为回调。

在此处的文档中:http: //docs.oracle.com/javase/6/docs/technotes/guides/scripting/programmer_guide/ 解释了如何在 javascript 中为接口实现 java 方法,而不是如何调用 Java 方法形成javascript。

谢谢

4

2 回答 2

1

不确定这是否正是您要查找的内容,但这里有一个代码示例,该示例将 java 对象回调提供到一些 javascript 代码中,然后稍后将回调该回调:

public class JsCallback{
  public static void main(String[] args) throws Exception{

   ScriptEngineManager factory = new ScriptEngineManager();
   ScriptEngine engine = factory.getEngineByName("JavaScript");
   engine.put("cb", new JsCallback());
   engine.eval("println('Doing something in javascript here first');" +
     "cb.apply('bar');");
  }

  public void apply(String s){
    System.out.println("Back in java code here: " + s);
  }
}
于 2013-05-10T01:24:14.547 回答
1

Function在 Java 8 中使用 a :

JS:

run = function(callback) {
  callback("foo");
}

爪哇:

Function<String,String> fn = (arg) -> {
  return arg.toUpperCase();
};

// call run(fn)
invokeFunction("run", fn)

您还可以使用 Runnable(无参数或返回值)和可能许多其他单方法接口作为回调接口。据我了解,它将尝试找到一个动态匹配参数列表的方法。

大概您也可以使用它来将函数绑定到范围。

于 2016-03-10T14:33:01.353 回答