Java使用WebView實(shí)現(xiàn)桌面程序的技術(shù)指南
1、簡(jiǎn)述
在現(xiàn)代軟件開(kāi)發(fā)中,許多應(yīng)用需要在桌面程序中嵌入 Web 頁(yè)面。例如,你可能需要在 Java 桌面應(yīng)用中嵌入一部分 Web 前端,或者加載一個(gè) HTML5 界面以增強(qiáng)用戶體驗(yàn)。JavaFX 提供了 WebView 組件,使開(kāi)發(fā)者可以輕松地在 Java 應(yīng)用程序中加載和顯示 Web 頁(yè)面。
本博客將介紹 JavaFX WebView
的基本用法,并提供一個(gè)完整的示例,演示如何加載網(wǎng)頁(yè)并與 JavaScript 交互。
2、WebView 特點(diǎn)
WebView
是 JavaFX 提供的一個(gè)嵌入式瀏覽器組件,它基于 WebKit 渲染引擎,支持 HTML、CSS 和 JavaScript,適用于在 Java 應(yīng)用中顯示 Web 內(nèi)容。它的主要特點(diǎn)包括:
- 支持加載本地或遠(yuǎn)程 HTML 頁(yè)面
- 允許 Java 與 JavaScript 互相調(diào)用
- 提供完整的網(wǎng)頁(yè)渲染能力
- 適用于 JavaFX 桌面應(yīng)用
3、搭建 WebView 示例
3.1 添加 JavaFX 依賴(lài)
如果你使用 Maven,需要在 pom.xml
文件中添加 JavaFX 依賴(lài):
<dependencies> <dependency> <groupId>org.openjfx</groupId> <artifactId>javafx-controls</artifactId> <version>17</version> </dependency> <dependency> <groupId>org.openjfx</groupId> <artifactId>javafx-web</artifactId> <version>17</version> </dependency> </dependencies>
3.2 編寫(xiě) WebView 示例代碼
下面的 Java 代碼演示了如何使用 WebView
加載網(wǎng)頁(yè),并提供了簡(jiǎn)單的 JavaScript 交互功能。
import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.layout.VBox; import javafx.scene.web.WebEngine; import javafx.scene.web.WebView; import javafx.stage.Stage; public class WebViewDemo extends Application { @Override public void start(Stage primaryStage) { // 創(chuàng)建 WebView WebView webView = new WebView(); WebEngine webEngine = webView.getEngine(); // 加載網(wǎng)頁(yè),可以是本地文件或在線網(wǎng)頁(yè) webEngine.load("https://www.baidu.com"); // 創(chuàng)建一個(gè) JavaFX 窗口 VBox root = new VBox(webView); Scene scene = new Scene(root, 800, 600); primaryStage.setTitle("Java WebView 示例"); primaryStage.setScene(scene); primaryStage.show(); } public static void main(String[] args) { launch(args); } }
3.3 運(yùn)行效果
運(yùn)行上面的代碼后,會(huì)彈出一個(gè) JavaFX 窗口,并在其中加載指定的 Web 頁(yè)面。
4、實(shí)現(xiàn) Java 和 JavaScript 交互
4.1 在 Java 中調(diào)用 JavaScript
我們可以通過(guò) WebEngine
執(zhí)行 JavaScript 代碼,例如:
import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.control.Alert; import javafx.scene.control.Button; import javafx.scene.layout.VBox; import javafx.scene.web.WebEngine; import javafx.scene.web.WebView; import javafx.stage.Stage; public class WebViewJavaScriptDemo extends Application { @Override public void start(Stage primaryStage) { WebView webView = new WebView(); WebEngine webEngine = webView.getEngine(); webEngine.loadContent("<html><body><h2>Java 與 JavaScript 交互</h2></body></html>"); // 處理 JavaScript alert 彈窗 webEngine.setOnAlert(event -> { Alert alert = new Alert(Alert.AlertType.INFORMATION); alert.setTitle("JavaScript Alert"); alert.setHeaderText(null); alert.setContentText(event.getData()); alert.showAndWait(); }); // 創(chuàng)建按鈕,點(diǎn)擊后觸發(fā) Java 調(diào)用 JavaScript Button button = new Button("調(diào)用 JavaScript"); button.setOnAction(event -> webEngine.executeScript("alert('Java 調(diào)用 JavaScript!');")); VBox root = new VBox(webView, button); Scene scene = new Scene(root, 800, 600); primaryStage.setTitle("JavaFX WebView JavaScript 交互"); primaryStage.setScene(scene); primaryStage.show(); } public static void main(String[] args) { launch(args); } }
點(diǎn)擊按鈕后,會(huì)彈出 JavaScript alert
彈窗。
4.2 在 JavaScript 中調(diào)用 Java 方法
你可以讓 JavaScript 調(diào)用 Java 方法,例如:
import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.layout.VBox; import javafx.scene.web.WebEngine; import javafx.scene.web.WebView; import javafx.stage.Stage; import netscape.javascript.JSObject; public class JavaScriptToJavaDemo extends Application { public static class JavaBridge { public void showMessage(String message) { System.out.println("JavaScript 調(diào)用 Java: " + message); } } @Override public void start(Stage primaryStage) { WebView webView = new WebView(); WebEngine webEngine = webView.getEngine(); webEngine.load("file:///E:\\lk\\springboot-example\\lm-javafx\\src\\main\\resources\\html\\activity.html"); // 綁定 Java 對(duì)象到 JavaScript JSObject window = (JSObject) webEngine.executeScript("window"); window.setMember("javaBridge", new JavaBridge()); VBox root = new VBox(webView); Scene scene = new Scene(root, 800, 600); primaryStage.setTitle("JavaScript 調(diào)用 Java 示例"); primaryStage.setScene(scene); primaryStage.show(); } public static void main(String[] args) { launch(args); } }
在resource目錄創(chuàng)建一個(gè)html目錄,存放當(dāng)前交互的html:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> </head> <body> <h2>JavaScript 調(diào)用 Java</h2> <button onclick="javaBridge.showMessage('Hello from JavaScript!')">點(diǎn)擊調(diào)用 Java 方法</button> </body> <script> function callJava() { javaBridge.showMessage("JavaScript 觸發(fā) Java 方法!"); } </script> </html>
在 HTML 頁(yè)面中點(diǎn)擊按鈕后,JavaScript 會(huì)調(diào)用 Java 的 showMessage
方法,并在控制臺(tái)打印消息:
JavaScript 調(diào)用 Java: Hello from JavaScript!
JavaScript 調(diào)用 Java: Hello from JavaScript!
JavaScript 調(diào)用 Java: Hello from JavaScript
5、打包為可執(zhí)行文件(.exe)
可以使用 jpackage
將 JavaFX 應(yīng)用打包為可執(zhí)行文件(.exe
):
jpackage --name WebViewApp --input . --main-jar WebViewDemo.jar --main-class WebViewDemo --type exe
這樣就可以將 Java WebView 應(yīng)用打包為 Windows 可執(zhí)行文件。
6、總結(jié)
在本博客中,我們介紹了如何在 JavaFX 中使用 WebView
加載網(wǎng)頁(yè),并實(shí)現(xiàn) Java 與 JavaScript 之間的交互。核心內(nèi)容包括:
- 在 Java 中嵌入 WebView 并加載網(wǎng)頁(yè)
- Java 調(diào)用 JavaScript 代碼
- JavaScript 調(diào)用 Java 方法
- 將 Java WebView 應(yīng)用打包成
.exe
通過(guò) WebView,可以輕松地在 Java 桌面應(yīng)用中嵌入 Web 技術(shù),從而結(jié)合 Web 和 Java 的優(yōu)勢(shì)來(lái)開(kāi)發(fā)強(qiáng)大的桌面應(yīng)用。
以上就是Java使用WebView實(shí)現(xiàn)桌面程序的技術(shù)指南的詳細(xì)內(nèi)容,更多關(guān)于Java WebView桌面程序的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
SpringBoot整合redis+Aop防止重復(fù)提交的實(shí)現(xiàn)
Spring Boot通過(guò)AOP可以實(shí)現(xiàn)防止表單重復(fù)提交,本文主要介紹了SpringBoot整合redis+Aop防止重復(fù)提交的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07MyBatis的<foreach>以及java代碼的批處理方式
這篇文章主要介紹了MyBatis的<foreach>以及java代碼的批處理方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-08-08Flowable整合SpringBoot實(shí)現(xiàn)的示例代碼
本文詳細(xì)介紹了如何在SpringBoot項(xiàng)目中整合Flowable進(jìn)行工作流管理,包括依賴(lài)引入、流程部署與啟動(dòng)、表結(jié)構(gòu)、流程掛起和激活以及任務(wù)分配等關(guān)鍵操作,具有一定的參考價(jià)值,感興趣的可以了解一下2024-09-09idea創(chuàng)建SpringBoot自動(dòng)創(chuàng)建Lombok無(wú)效果的問(wèn)題解決方案
這篇文章主要介紹了idea創(chuàng)建SpringBoot自動(dòng)創(chuàng)建Lombok無(wú)效果的問(wèn)題解決方案,感興趣的朋友跟隨小編一起看看吧2024-12-12java開(kāi)發(fā)技巧代碼寫(xiě)的快且bug少的原因分析
這篇文章主要為大家介紹了java開(kāi)發(fā)中代碼寫(xiě)的快且bug少的原因分析及技巧詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12java.util.ArrayDeque類(lèi)使用方法詳解
這篇文章主要介紹了java.util.ArrayDeque類(lèi)使用方法,java.util.ArrayDeque類(lèi)提供了可調(diào)整大小的陣列,并實(shí)現(xiàn)了Deque接口,感興趣的小伙伴們可以參考一下2016-03-03關(guān)于Mybatis-Plus字段策略與數(shù)據(jù)庫(kù)自動(dòng)更新時(shí)間的一些問(wèn)題
這篇文章主要介紹了關(guān)于Mybatis-Plus字段策略與數(shù)據(jù)庫(kù)自動(dòng)更新時(shí)間的一些問(wèn)題,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10