[英]Java FX liveconnect - calling javascript function from FX application
[英]JAVA FX + Javascript
我從未使用過JavaFX,但是現在我需要編寫一個將嵌入瀏覽器的小型應用程序,並且需要將一些數據傳遞給瀏覽器並從瀏覽器取回一些數據。 正如我讀過的,我需要JavaScript作為交換數據的橋梁。 我嘗試了很多這樣的示例:
http://knowles.co.za/javafx-and-javascript-calling-java-from-javascript/
http://www.java2s.com/Code/Java/JavaFX/WebEngineLoadListener.htm
但我什么都做不了。
有人可以給我工作的例子嗎?
我認為您正在詢問JavaFX和JavaScript之間的交互
首先,此操作通過Nashorn Engine執行
讓我們了解一個簡單的示例並編寫其完整代碼:
問題:我們想使用javafx,JS和html獲取兩個數字的和
假設我們有HTML
當用戶單擊按鈕時,它調用JavaScript函數,該函數調用java方法(即java方法),該方法接收兩個數字並返回總和
因此,讓我們創建一個Java類,該類具有一種計算兩個數字之和的方法,非常簡單
public class Adder{
public double getSum(String a, String b)
{
return Double.parseDouble(b) + Double.parseDouble(a);
}}
所以我們需要將Java對象傳遞(注入)到javascript中,以便我們可以使用它來調用方法,那么如何將Java對象注入JS中呢? 只需使用以下代碼
WebView browser = new WebView();
browser.getEngine().getLoadWorker()
.stateProperty()
.addListener((obs, old, neww) ->
{
if (neww == Worker.State.SUCCEEDED)
{
JSObject jsobj = (JSObject) browser.getEngine()
.executeScript("window");
jsobj.setMember("adder", new Adder());
}
});
我們在最后一行注入了一個java對象(new Adder()),並為其指定了要在Java腳本代碼中使用的名稱(adder),所以現在的問題是如何在JavaScript中使用加法器?
考慮以下JavaScript函數並調用它添加
function add()
{
var sum = adder.getSum("5", "7");
}
如我們所見,很簡單,我們只調用傳遞的(注入的)java對象(Adder對象),但是使用名稱adder並調用方法getSum(“ 5”,“ 7”)
現在我們有一個完整的代碼
1-在您的IDE中創建一個新的JavaFX項目,並將其命名為主類NashornTest,下面是代碼
import javafx.application.Application;
import javafx.concurrent.Worker;
import javafx.scene.Scene;
import javafx.scene.layout.VBox;
import javafx.scene.web.WebView;
import javafx.stage.Stage;
import netscape.javascript.JSObject;
public class NashornTest extends Application{
@Override
public void start(Stage stage)
{
//create an embeded web browser
WebView browser = new WebView();
browser.getEngine().getLoadWorker()
.stateProperty()
.addListener((obs, old, neww) ->
{
if (neww == Worker.State.SUCCEEDED)
{
// Let JavaScript make calls to adder object,
//so we need to inject an [Adder] object into the JS code
JSObject bridge = (JSObject) browser.getEngine()
.executeScript("window");
bridge.setMember("adder", new Adder());
}
});
//load the html page
browser.getEngine().load(NashornTest.class.getResource("index.xhtml").toString());
VBox box = new VBox(browser);
Scene scene = new Scene(box);
stage.setScene(scene);
stage.show();
}
public static void main(String[] args)
{
launch(args);
}}
2-創建一個Java類並將其稱為Adder,這是代碼
public class Adder{
public double getSum(String a, String b)
{
return Double.parseDouble(b) + Double.parseDouble(a);
}}
3-創建一個XHTML文件,並將其命名為index.xhtml,這是腳本,它必須與NashornTest.java在同一java包中
<!DOCTYPE html> <html> <head> <title>TODO supply a title</title> <meta name="viewport" content="width=device-width, initial-scale=1.0"/> <script> function add() { var num1 = document.getElementById("num1Field").value; var num2 = document.getElementById("num2Field").value; //make calls for injected java object var sum = adder.getSum(num1, num2); document.getElementById("outputDiv").innerHTML = "sum = " + sum; } </script> </head> <body> <input id="num1Field"/> <input id="num2Field"/> <button onclick="add()">sum</button> <div id="outputDiv"></div> </body> </html>
最后,這是Java和JavaScript交互的簡單開始,我希望本文對您有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.