2

javax.script を使用して、javascript コードを Java メソッドに埋め込みます。

私のプロジェクトでは、javascript が websocket を介して非同期の http 要求を送信するようにします。応答を受信したら、コールバック関数を実行する必要があります。

Java で記述されたメソッドをコールバックとして呼び出したいと考えています。

ここのドキュメント: http://docs.oracle.com/javase/6/docs/technotes/guides/scripting/programmer_guide/ インターフェースの javascript で Java メソッドを実装する方法が説明されていますが、Java メソッドを呼び出す方法は説明されていません。フォームジャバスクリプト。

ありがとう

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

FunctionJava 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 に答える