javax.script传递给javascript一个Java方法作为回调

javax.script pass to javascript a Java method to use as a callback

本文关键字:方法 Java 回调 一个 javascript script javax      更新时间:2023-09-26

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

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

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

在这里的文档:http://docs.oracle.com/javase/6/docs/technotes/guides/scripting/programmer_guide/它解释了如何在javascript中为接口实现java方法,但没有说明如何从javascript中调用java方法。

谢谢

不确定这是否正是您正在寻找的,但这里有一个代码示例,提供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);
  }
}

在Java 8中使用Function:

JS:

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

Function<String,String> fn = (arg) -> {
  return arg.toUpperCase();
};
// call run(fn)
invokeFunction("run", fn)

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