我正在为用Java编写的视频游戏开发脚本实现。
我有兴趣能够定义一个javascript对象,例如:
var obj = ({
x: 1,
a: "meh",
onEvent: function(info) {
//do stuff
}
});
并将其通过确定的管道传递到Java土地。目前,在Java中,我收到的对象是sun.org.mozilla.javasript.internal.NativeObject,它看起来不太实用。有什么办法可以将javascript转移到Java对象中,我可以在其中访问数据吗?具体来说,不使用GWT,因为我没有真正使用Web技术。
编辑清晰度: 我没有将一串Javascript代码传递给Java函数ala JSON。我正在使用javax.script包来评估整个脚本。在脚本引擎中,存在与Java对象的绑定,其中包含我想在javascript对象中作为参数传递的方法。
提前感谢!
答案 0 :(得分:1)
我没有做太多的工作,但TFM的例子看起来并不那么困难。不知道你已经尝试过什么,但无论如何:
public static void main(String[] args) throws Exception {
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("JavaScript");
// JavaScript code in a String. This code defines a script object 'obj'
// with one method called 'hello'.
String script = "var obj = new Object(); obj.hello = function(name) { print('Hello, ' + name); }";
// evaluate script
engine.eval(script);
// javax.script.Invocable is an optional interface.
// Check whether your script engine implements or not!
// Note that the JavaScript engine implements Invocable interface.
Invocable inv = (Invocable) engine;
// get script object on which we want to call the method
Object obj = engine.get("obj"); // <---- THIS IS A JAVA.LANG.OBJECT
// invoke the method named "hello" on the script object "obj"
inv.invokeMethod(obj, "hello", "Script Method !!" );
}