当前位置: 代码网 > it编程>编程语言>Java > Java使用WebView实现桌面程序的技术指南

Java使用WebView实现桌面程序的技术指南

2025年05月11日 Java 我要评论
1、简述在现代软件开发中,许多应用需要在桌面程序中嵌入 web 页面。例如,你可能需要在 java 桌面应用中嵌入一部分 web 前端,或者加载一个 html5 界面以增强用户体验。javafx 提供

1、简述

在现代软件开发中,许多应用需要在桌面程序中嵌入 web 页面。例如,你可能需要在 java 桌面应用中嵌入一部分 web 前端,或者加载一个 html5 界面以增强用户体验。javafx 提供了 webview 组件,使开发者可以轻松地在 java 应用程序中加载和显示 web 页面。

本博客将介绍 javafx webview 的基本用法,并提供一个完整的示例,演示如何加载网页并与 javascript 交互。

2、webview 特点

webview 是 javafx 提供的一个嵌入式浏览器组件,它基于 webkit 渲染引擎,支持 html、css 和 javascript,适用于在 java 应用中显示 web 内容。它的主要特点包括:

  • 支持加载本地或远程 html 页面
  • 允许 java 与 javascript 互相调用
  • 提供完整的网页渲染能力
  • 适用于 javafx 桌面应用

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 加载网页,并提供了简单的 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) {
        // 创建 webview
        webview webview = new webview();
        webengine webengine = webview.getengine();

        // 加载网页,可以是本地文件或在线网页
        webengine.load("https://www.baidu.com");

        // 创建一个 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、实现 java 和 javascript 交互

4.1 在 java 中调用 javascript

我们可以通过 webengine 执行 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();
        });

        // 创建按钮,点击后触发 java 调用 javascript
        button button = new button("调用 javascript");
        button.setonaction(event -> webengine.executescript("alert('java 调用 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 中调用 java 方法

你可以让 javascript 调用 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 调用 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 调用 java 示例");
        primarystage.setscene(scene);
        primarystage.show();
    }

    public static void main(string[] args) {
        launch(args);
    }
}

在resource目录创建一个html目录,存放当前交互的html:

<!doctype html>
<html lang="en">
<head>
    <meta charset="utf-8">
</head>
<body>
<h2>javascript 调用 java</h2>
<button onclick="javabridge.showmessage('hello from javascript!')">点击调用 java 方法</button>
</body>
<script>
    function calljava() {
        javabridge.showmessage("javascript 触发 java 方法!");
    }
</script>
</html>

在 html 页面中点击按钮后,javascript 会调用 java 的 showmessage 方法,并在控制台打印消息:

javascript 调用 java: hello from javascript!
javascript 调用 java: hello from javascript!
javascript 调用 java: hello from javascript

5、打包为可执行文件(.exe)

可以使用 jpackage 将 javafx 应用打包为可执行文件(.exe):

jpackage --name webviewapp --input . --main-jar webviewdemo.jar --main-class webviewdemo --type exe

这样就可以将 java webview 应用打包为 windows 可执行文件。

6、总结

在本博客中,我们介绍了如何在 javafx 中使用 webview 加载网页,并实现 java 与 javascript 之间的交互。核心内容包括:

  • 在 java 中嵌入 webview 并加载网页
  • java 调用 javascript 代码
  • javascript 调用 java 方法
  • 将 java webview 应用打包成 .exe

通过 webview,可以轻松地在 java 桌面应用中嵌入 web 技术,从而结合 web 和 java 的优势来开发强大的桌面应用。

以上就是java使用webview实现桌面程序的技术指南的详细内容,更多关于java webview桌面程序的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com