2011-01-28 154 views
2

正如书名所描述的,我想实现如下:如何从JavaScript调用Java方法

  1. 创建Java对象
  2. 将其传递给JavaScript
  3. 调用方法(一传递的对象
  4. 上二传手例如)继续工作与对象在Java

我使用包含在Java脚本。 如果有人能帮助我,我会很高兴。

回答

5

如果您正在使用ScriptEngine框架,这非常简单。你可以在“传递” Java对象到JavaScript的方式有两种:

  1. 你可以在“种子”的执行环境的JavaScript代码,并安排将Java对象仅仅是“有”,在全局命名空间
  2. 你可以将Java对象作为参数传递给JavaScript函数。

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

要做第一件事,你必须为脚本引擎设置“绑定”。这就像一个地图:

final Bindings globals = engine.createBindings(); 
globals.put("foo", yourObject); 

现在,当JavaScript代码在引擎运行,全局符号“foo”将被作为一个Java对象的引用。你可以绑定尽可能多的引用,只要你喜欢。

如果您想将Java对象作为参数传递给JavaScript函数,您首先需要的是通过调用 JavaScript函数。要做到这一点,您可以使用“invokeFunction”或“invokeMethod中”法经“Invocable的”界面曝光:

final Object result = ((Invocable) engine).invokeMethod(context, methodName, arg, arg, ...); 

的“上下文”还有就是你想this指东西参考功能这就是所谓的。 “methodName”只是一个给出全局JavaScript函数名称的字符串。

Java类通过它们完全合格的路径名可用于JavaScript环境:

var javaHashMap = new java.util.HashMap(); 

这会给你一个Java HashMap实例JavaScript变数。

+0

你能为此提供一个简单的代码吗?现在我用键和对象“放”,但不知道这是否是你说的方式。我有另一个问题 - importPackage。我知道在犀牛中你只需添加scope = new ImporterTopLevel(cx),但是我怎么才能在ScriptEngine中实现这一点? – o15a3d4l11s2 2011-01-28 14:43:27