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