2

我正在尝试使用 JavaFX 调用 Java 函数作为来自 JavaScript 的回调。首先,我在初始化期间将 Java 类添加为 window 的成员:

JSObject jsobj = (JSObject) currentWebEngine.executeScript("window");
jsobj.setMember("java", this);

Java请求函数在内部描述如下Platform.runLater()

String script = "document.makeRequest('"+inputString+"')";
currentWebEngine.executeScript(script);

在javascript端完成异步请求后,应该调用java函数返回结果。但是,我在这方面遇到了例外。我什至尝试调用不带参数的函数,但仍然无法正常工作:

window.java.returnResult();

但我得到以下异常:

可运行的 netscape.javascript.JSException 中的异常:TypeError:“未定义”不是对象

它与异步请求无关,因为我什至尝试在 makeRequest() 函数中直接调用它并得到相同的错误。知道我在那个领域做错了什么吗?前面的代码集成在 Desktop JFrame 应用程序中,而不是小程序中。

4

2 回答 2

3

我设法找到了问题的解决方案。以下代码调用得有点早,因此该类未在 javascript 中注册:

JSObject jsobj = (JSObject) currentWebEngine.executeScript("window");
jsobj.setMember("java", this);

我只是在网络引擎的侦听器处调用它并且它起作用了。

于 2013-05-07T14:11:55.453 回答
0

使用 DWR,您可以通过 JavaScript 使用 java 方法。

于 2013-05-06T11:42:46.440 回答