选择用于嵌入跨平台桌面应用程序的 JavaFX Web 浏览器控件

JxBrowser和JavaFX WebView都允许您在跨平台Java桌面应用程序中引入web技术,以获得两者的最佳效果:web平台的普遍性和Java平台的强大功能。

JxBrowser 和 JavaFX WebView 有什么区别? 在本文中,我们将比较这些解决方案的架构、渲染、对最新 Web 标准(包括 HTML5、CSS3、JavaScript 等)的支持。

安装

JavaFX WebView 是在 2014 年成为 JDK 8 的一部分的 JavaFX 2.0 中引入的。如果您使用 Java 8,那么您不需要做任何特别的事情来开始使用 JavaFX WebView。 JDK 11 及更高版本不再捆绑 JavaFX,因此要使用 JavaFX 11 或更高版本进行开发,您必须单独下载。

JxBrowser 是一个第三方库,您需要将其作为依赖项添加到您的项目中。 您可以简单地下载并将其添加到您的应用程序类路径中,或者快速将其添加到您的 Gradle 或Maven 项目中。

引擎

JavaFX WebKit 在内部使用 WebKit。 JxBrowser 使用功能齐全的Chromium 底层。 这两种解决方案都包含所有必要的引擎二进制文件,并且不需要终端用户安装 Chromium 或 Safari。

渲染

WebKit 不渲染网页,因此 JavaFX 开发人员必须实现一个单独的轻量级(离屏)渲染器。 JavaFX 17 WebView 可以很好地渲染网页,因此与 Safari、Mozilla Firefox 或 Google Chrome 相比不会有任何明显的差异。

在 JxBrowser 中,网页由 Chromium 使用 GPU 渲染。 因此它们看起来与 Google Chrome 中的完全一样。 JxBrowser 支持两种渲染模式:离屏和硬件加速。

架构

JavaFX 在您的 Java 进程中初始化并运行 WebKit。 与 JxBrowser 相比,这种方法的优点是 JavaFX 允许您非常快速地创建和显示 WebView,而 JxBrowser 必须首先启动外部 Chromium 进程。 然而,为了获得这样的速度,WebKit 会分配和使用 Java 进程的内存和 CPU。 一些现代网页可能会分配超过 1GB 的 RAM。 您创建和加载网页的 WebView 实例越多,您的 Java 应用程序占用的 RAM 就越多。

JavaFX WebView架构

JxBrowser 在单独的本机进程中运行 Chromium,并通过进程间通信 (IPC) 桥与其进行通信。 使用此解决方案,Chromium 不会影响 Java 应用程序的内存使用。 此外,JxBrowser 支持 Chromium 多进程架构。 如果网页或 JavaScript 由于某种原因崩溃,Chromium 将继续工作,您甚至可以恢复崩溃的网页。

JxBrowser 架构

安全性

WebKit 是使用 C++ 编写的。 为了调用 WebKit 功能,JavaFX WebView 使用了 JNI。 由于 WebKit 在 JVM 中运行,任何错误或意外行为都可能导致 JVM 崩溃并意外终止您的 Java 应用程序。 终端用户的数据也可能会丢失或损坏。

如果 Chromium 出现错误,您的 Java 程序将继续运行。 JxBrowser 甚至提供了一个 API 来通知您 Chromium 进程中的意外终止或崩溃,因此您可以重新初始化和恢复用户会话以获得更好的用户体验。

Web标准

如果您在 JavaFX 17 WebView 和 JxBrowser 7.20 (Chromium 94) 中加载 http://html5test.com,您将获得以下结果:

JavaFX WebView 和 JxBrowser 中的 HTML5 功能支持

不同的 JavaFX 版本支持不同的 Web 标准。 例如,JavaFX 8 不可以在 YouTube 上播放视频:

并用一些工件渲染谷歌::

JavaFX 17 适用于相同的任务:

JavaFX 不支持 WebGL。

JavaFX WebView 和 JxBrowser 中的 WebGL 支持

即使在 JavaFX 17 中,Google 地图也无法正确显示:

被支持的 UI 工具包

JavaFX WebView 可无缝地用于 JavaFX 应用程序。 如果您使用 Java Swing 或 SWT 开发应用程序,则可以通过 JFXPanel 和 FXCanvas 嵌入 JavaFX WebView。

JxBrowser 支持所有 Java UI 工具包,包括 JavaFX、Swing 和 SWT。 它提供了以下嵌入组件:

  • com.teamdev.jxbrowser.view.swing.BrowserView
  • com.teamdev.jxbrowser.view.javafx.BrowserView
  • com.teamdev.jxbrowser.view.swt.BrowserView

嵌入

编写带有地址栏和渲染当前加载网页的 Web View的简单 JavaFX 应用程序所需的工作是非常相似的。

JavaFX WebView

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.TextField;
import javafx.scene.layout.BorderPane;
import javafx.scene.web.WebEngine;
import javafx.scene.web.WebView;
import javafx.stage.Stage;
public final class Main extends Application {@Overridepublic void start(Stage primaryStage) {WebView view = new WebView();WebEngine engine = view.getEngine();BorderPane root = new BorderPane(view);TextField addressBar = new TextField("https://google.com");addressBar.setOnAction(event ->engine.load(addressBar.getText()));root.setTop(addressBar);// Update address bar with URL of the loaded web page.engine.locationProperty().addListener((observable, oldValue, newValue) ->addressBar.setText(newValue));primaryStage.setTitle("JavaFX WebView");primaryStage.setScene(new Scene(root, 1000, 600));primaryStage.show();engine.load(addressBar.getText());}
}

JxBrowser

import static com.teamdev.jxbrowser.engine.RenderingMode.HARDWARE_ACCELERATED;import com.teamdev.jxbrowser.browser.Browser;
import com.teamdev.jxbrowser.engine.Engine;
import com.teamdev.jxbrowser.navigation.event.NavigationFinished;
import com.teamdev.jxbrowser.view.javafx.BrowserView;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.TextField;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;public final class SmokeTest extends Application {@Overridepublic void start(Stage primaryStage) {Engine engine = Engine.newInstance(HARDWARE_ACCELERATED);Browser browser = engine.newBrowser();BrowserView view = BrowserView.newInstance(browser);BorderPane root = new BorderPane(view);TextField addressBar = new TextField("https://google.com");addressBar.setOnAction(event -> browser.navigation().loadUrl(addressBar.getText()));root.setTop(addressBar);// Update address bar with URL of the loaded web page.browser.navigation().on(NavigationFinished.class, event -> {if (event.isInMainFrame()) {addressBar.setText(event.url());}});primaryStage.setTitle("JxBrowser");primaryStage.setScene(new Scene(root, 1000, 600));primaryStage.show();browser.navigation().loadUrl(addressBar.getText());// Close the engine when stage is about to close.primaryStage.setOnCloseRequest(event -> engine.close());}
}

API和功能

JavaFX WebView API:~1 个包,~10 个类和接口。 JavaFX WebView 代表一个简单的 Web 浏览器控件。 没有提供功能齐全的 Web 浏览器功能的目标,例如网络、SSL、身份验证、cookie、DevTools、插件、PDF 查看器等。

该 API 提供了基本的 Web 浏览器功能,允许加载网页、获取各种加载事件、访问和修改 DOM、执行 JavaScript、通过将 Java 对象注入 JavaScript 来从 JavaScript 调用 Java、处理弹出窗口以及显示 JavaScript 对话框,例如警报、 确认,提示。

JxBrowser API:~60 个包,~580 个类和接口。 JxBrowser 封装并使用了一个功能齐全的 Web 浏览器应用程序。

该 API 提供对数百种 Chromium 功能的访问,例如管理配置文件,包括隐身、插件、代理、cookie、拼写检查、下载、权限、身份验证(代理、基本、摘要、NTLM、SSL 客户端证书、SuisseID、U2F、集成 Windows 身份验证和 Kerberos)、密码、缩放、打印、DevTools、网络、自定义协议等。

支持和更新

JavaFX 是一个开源项目。 如果您发现错误或缺少功能,您可以做出贡献。 JavaFX 遵循 OpenJDK 的 6 个月的发布周期。 每 6 个月发布一个新版本。 目前尚不清楚 WebKit 引擎多久升级到支持最新 Web 标准并包含已报告安全漏洞修复的最新稳定版本。

JxBrowser 是一款商业产品,专为对集成第三方解决方案的质量和支持有高要求,使用Java技术开发软件的商业公司设计和打造的。 自 2007 年以来,TeamDev 一直开发并支持 JxBrowser。

所有拥有有效标准支持订阅的客户都可以免费使用所有新的 JxBrowser 版本,并直接从 JxBrowser 工程师那里获得技术支持。

几乎每个月都会发布一个新版本的 JxBrowser。

总结

如果您使用 JavaFX 开发软件,并且您需要显示一个简单的网页,而无需使用 HTML5 功能或高级 Web 浏览器功能,那么 JavaFX WebView 将非常适用于这种情况。

对于在 JavaFX、Swing 或 SWT 上进行时间敏感的商业软件开发,特定用例需要现代 Web 功能,并且必须符合最新的 Web 标准,JxBrowser 是一个更安全、更可定制的解决方案,由专门的开发团队支持。

JxBrowser 与 JavaFX WebView相关推荐

  1. Atitit 桌面软件跨平台gui解决方案 javafx webview

    Atitit 桌面软件跨平台gui解决方案 javafx webview 参考文章: (1)Atitit 桌面软件跨平台gui解决方案 javafx webview (2)https://www.cn ...

  2. java javafx webview_基于JavaFX WebView 的采集开发,了解一下?

    背景 最近想做一个桌面版的客户端,能够加载连接,获取源码等,主要用于快速的获取网站的栏目,便与爬虫该栏目下的最新信息. 相关插件介绍 JavaFX是: •用于创建和交付桌面应用程序的软件平台,以及可以 ...

  3. javaFX WebView使用及打开网页

    前言 JavaFX WebView ( javafx.scene.web.WebView) 组件能够在 JavaFX 应用程序中显示网页(HTML.CSS.SVG.JavaScript). 因此,Ja ...

  4. webview检测html事件,在JavaFX WebView中检测HTML textarea onkeyup事件

    小编典典 如果尝试将JavaFX TextArea对象的内容打印到WebView中,则应将侦听器添加到TextArea而不是WebView. 如果尝试在WebView的HTML页面内的HTML Tex ...

  5. JAVA服务端实现页面截屏(附代码)

    JAVA服务端实现页面截屏 适配需求 方案一.使用JxBrowser 使用步骤: 方案二.JavaFX WebView 使用步骤: 方案三.Headless Chrome 使用步骤: 综上方案对比 记 ...

  6. java浏览器fx,浏览器控件JxBrowser JavaFX开发快速入门指南

    要求:JDK 1.8及更高版本. 1.下载JxBrowser库 下载JxBrowser 将下载的归档文件解压到某个目录(例如D:\ Projects \ MyProject \)中. 当你解压缩档案时 ...

  7. eclipse为什么导入不了awt_为什么选择javafx?

    之前我发了一篇文章讲述跨平台的GUI技术,其中提到了javafx.对此很多人表示疑惑,认为javafx是落伍的开发技术.对此,我想专门写一篇文章来做个介绍. 其实很多人并没有听说过javafx.现在最 ...

  8. javafx项目_为什么选择javafx?

    之前我发了一篇文章讲述跨平台的GUI技术,其中提到了javafx.对此很多人表示疑惑,认为javafx是落伍的开发技术.对此,我想专门写一篇文章来做个介绍. 其实很多人并没有听说过javafx.现在最 ...

  9. java api文档_JAVA浏览器控件JxBrowser v7.3上线!最新API文档打包带走

    JxBrowser是将基于Chromium的浏览器与Java应用程序集成,以处理和显示HTML5,CSS3,JavaScript,Flash等. 近日,JxBrowser v7.3发布上线,支持最新m ...

  10. javaFX安装及使用

    一.javaFX下载 Jdk 从 1.8 开始 jdk 自带 JavaFX,到 Jdk 11 开始 jdk 不再内置 JavaFX,所以如果你使用的是高版本的 jdk 在使用 javaFX 的时候就需 ...

最新文章

  1. 开启笔记本win7的虚拟热点,让你的本本变成wifi
  2. 【手把手】JavaWeb 入门级项目实战 -- 文章发布系统 (第七节)
  3. cocos2dX 之CCParticle
  4. 语言模型(N-Gram)
  5. 数据库和ORMS:使用SQLAlchemy与数据库通信
  6. wpf tabcontrol嵌套自动跳转上层_Python Selenium包应对嵌套网页的方法和简单 js 脚本运行的实现...
  7. 影响网络电视直播清晰度的四个因素
  8. 中州韵输入法 linux 小鹤双拼,Rime输入法配置——小鹤双拼
  9. 用Python爬虫爬取广州大学教务系统的成绩(内网访问)
  10. c语言编写函数isprime(int a),用来判断自变量a是否为素数,若是素数,函数返回1,否则返回0。
  11. JavaScript实现在HTML中的粒子文字特效
  12. java计算机毕业设计小区物业管理系统录像展示.mp4源程序+mysql+系统+lw文档+远程调试
  13. Elasticsearch6.4专题之16:Ingest Node
  14. JetBrains Rider想创建新工程一直显示Syncing Project Templates...
  15. mysql call_mysql call用法:调用存储过程
  16. 拉卡拉智能POS收单渠道前景如何?
  17. 分布式系统-分片和路由
  18. 分享两个比较好用的U盘启动盘工具安装电脑系统必备
  19. 下载国外大数据库不用愁
  20. php 供应商管理系统,采购与供应商管理系统

热门文章

  1. android手机录屏工具,安卓手机上有什么好用的屏幕录屏软件可以推荐?
  2. 平面上两直线的夹角求法解析
  3. 链家广州二手房的数据与分析——爬取数据
  4. 树莓派 | 摄像头模块的使用方法
  5. 水经注地图发布服务中件间功能简介
  6. 自动驾驶:车道线检测、车速检测、实时通行跟踪、基于视频的车辆跟踪及流量统计
  7. MPLAB ICD3
  8. 号码吉凶查询易语言代码
  9. FPGA入门学习——流水灯
  10. git 小乌龟代码回退