如何从javascript调用java方法

o15*_*1s2 2 javascript java rhino

如标题所述,我想要实现的目标如下:

  1. 创建java对象
  2. 将其传递给JavaScript
  3. 在传递的对象上调用方法(例如setter)
  4. 继续使用java中的对象

我正在使用java中包含的脚本.如果有人可以帮助我,我会很高兴.

Poi*_*nty 5

如果您正在使用ScriptEngine框架,这非常简单.您可以通过两种方式将Java对象"传递"到JavaScript:

  1. 您可以"种子"JavaScript代码的执行环境,并安排Java对象只在全局命名空间中"存在"
  2. 您可以将Java对象作为参数传递给JavaScript函数.

您还可以从JavaScript访问Java构造函数,并根据需要实例化Java对象.

要做第一件事,你必须为脚本引擎设置"绑定".它就像一张地图:

final Bindings globals = engine.createBindings();
globals.put("foo", yourObject);
Run Code Online (Sandbox Code Playgroud)

现在,当JavaScript代码在该引擎中运行时,全局符号"foo"将用作对Java对象的引用.您可以根据需要绑定任意数量的引用.

如果要将Java对象作为参数传递给JavaScript函数,首先需要的是调用 JavaScript函数的方法.为此,您使用"Invocable"接口公开的"invokeFunction"或"invokeMethod"方法:

final Object result = ((Invocable) engine).invokeMethod(context, methodName, arg, arg, ... );
Run Code Online (Sandbox Code Playgroud)

"context"只是对你想要this在被调用的函数中引用的东西的引用."methodName"只是一个字符串,给出了全局JavaScript函数的名称.

JavaScript环境可通过其完全限定的路径名​​使用Java类:

var javaHashMap = new java.util.HashMap();
Run Code Online (Sandbox Code Playgroud)

这将为您提供Java HashMap实例作为JavaScript变量.