2013-05-06 132 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