2013-05-06 93 views
2

我想用JavaFX作为JavaScript的回调调用Java函数。 首先,我初始化过程中添加的Java类作为窗口的成员:从JavaScript调用Java函数

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(); 

,但我得到以下异常:

Exception in runnable netscape.javascript.JSException: TypeError: 'undefined' is not an object

它无关异步请求,因为我甚至尝试调用它直接在makeRequest()函数中得到相同的错误。 任何想法,我在那方面做错了什么? 以前的代码集成在桌面JFrame应用程序中,而不是小程序。

+0

在[Oracle WebView教程](http://docs.oracle.com/javafx/2/webview/jfxpub-webview.htm)中演示WebView到Java回调的示例是否适合您? – jewelsea 2013-05-06 20:07:17

回答

3

我设法找到问题的解决方案。下面的代码早叫了一下,因此类没有在JavaScript中注册:

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

我说这就是在Web引擎的监听器和它的工作。

0

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

+0

据我所知,DWR需要Java Server与Web浏览器进行通信。这不是我想要做的。我有一个使用JavaFX嵌入JavaScript的Swing桌面应用程序 – Sami 2013-05-06 14:31:10