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桌面程序的资料请关注代码网其它相关文章!
发表评论