Java使用WebView實現(xiàn)桌面程序的技術(shù)指南
1、簡述
在現(xiàn)代軟件開發(fā)中,許多應(yīng)用需要在桌面程序中嵌入 Web 頁面。例如,你可能需要在 Java 桌面應(yīng)用中嵌入一部分 Web 前端,或者加載一個 HTML5 界面以增強(qiáng)用戶體驗。JavaFX 提供了 WebView 組件,使開發(fā)者可以輕松地在 Java 應(yīng)用程序中加載和顯示 Web 頁面。
本博客將介紹 JavaFX WebView 的基本用法,并提供一個完整的示例,演示如何加載網(wǎng)頁并與 JavaScript 交互。
2、WebView 特點
WebView 是 JavaFX 提供的一個嵌入式瀏覽器組件,它基于 WebKit 渲染引擎,支持 HTML、CSS 和 JavaScript,適用于在 Java 應(yīng)用中顯示 Web 內(nèi)容。它的主要特點包括:
- 支持加載本地或遠(yuǎn)程 HTML 頁面
- 允許 Java 與 JavaScript 互相調(diào)用
- 提供完整的網(wǎng)頁渲染能力
- 適用于 JavaFX 桌面應(yīng)用
3、搭建 WebView 示例
3.1 添加 JavaFX 依賴
如果你使用 Maven,需要在 pom.xml 文件中添加 JavaFX 依賴:
<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 編寫 WebView 示例代碼
下面的 Java 代碼演示了如何使用 WebView 加載網(wǎng)頁,并提供了簡單的 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)頁,可以是本地文件或在線網(wǎng)頁
webEngine.load("https://www.baidu.com");
// 創(chuàng)建一個 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 運行效果
運行上面的代碼后,會彈出一個 JavaFX 窗口,并在其中加載指定的 Web 頁面。

4、實現(xiàn) Java 和 JavaScript 交互
4.1 在 Java 中調(diào)用 JavaScript
我們可以通過 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)建按鈕,點擊后觸發(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);
}
}
點擊按鈕后,會彈出 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 對象到 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)建一個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ào)用 Java 方法</button>
</body>
<script>
function callJava() {
javaBridge.showMessage("JavaScript 觸發(fā) Java 方法!");
}
</script>
</html>
在 HTML 頁面中點擊按鈕后,JavaScript 會調(diào)用 Java 的 showMessage 方法,并在控制臺打印消息:
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)頁,并實現(xiàn) Java 與 JavaScript 之間的交互。核心內(nèi)容包括:
- 在 Java 中嵌入 WebView 并加載網(wǎng)頁
- Java 調(diào)用 JavaScript 代碼
- JavaScript 調(diào)用 Java 方法
- 將 Java WebView 應(yīng)用打包成
.exe
通過 WebView,可以輕松地在 Java 桌面應(yīng)用中嵌入 Web 技術(shù),從而結(jié)合 Web 和 Java 的優(yōu)勢來開發(fā)強(qiáng)大的桌面應(yīng)用。
以上就是Java使用WebView實現(xiàn)桌面程序的技術(shù)指南的詳細(xì)內(nèi)容,更多關(guān)于Java WebView桌面程序的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
SpringBoot整合redis+Aop防止重復(fù)提交的實現(xiàn)
Spring Boot通過AOP可以實現(xiàn)防止表單重復(fù)提交,本文主要介紹了SpringBoot整合redis+Aop防止重復(fù)提交的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07
MyBatis的<foreach>以及java代碼的批處理方式
這篇文章主要介紹了MyBatis的<foreach>以及java代碼的批處理方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-08-08
Flowable整合SpringBoot實現(xiàn)的示例代碼
本文詳細(xì)介紹了如何在SpringBoot項目中整合Flowable進(jìn)行工作流管理,包括依賴引入、流程部署與啟動、表結(jié)構(gòu)、流程掛起和激活以及任務(wù)分配等關(guān)鍵操作,具有一定的參考價值,感興趣的可以了解一下2024-09-09
idea創(chuàng)建SpringBoot自動創(chuàng)建Lombok無效果的問題解決方案
這篇文章主要介紹了idea創(chuàng)建SpringBoot自動創(chuàng)建Lombok無效果的問題解決方案,感興趣的朋友跟隨小編一起看看吧2024-12-12
關(guān)于Mybatis-Plus字段策略與數(shù)據(jù)庫自動更新時間的一些問題
這篇文章主要介紹了關(guān)于Mybatis-Plus字段策略與數(shù)據(jù)庫自動更新時間的一些問題,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10

