Q:JxBrowser是什么?

JxBrowser是一个跨平台的Java库,允许将基于Google Chromium的Web浏览器组件集成到Java Swing / AWT / JavaFX应用程序中。使用JxBrowser,您可以将轻量级Swing / JavaFX组件嵌入到Java应用程序中,以显示现代网页,支持最新的Web标准,如HTML5,CSS3,JavaScript等。

Q:为什么选用JxBrowser?

BS结构的优点在于,软件维护和升级方便,只要能上网就能升级了且在很多地方都能够直接使用软件,而不需要安装,前提要能登陆到服务器。

CS结构缺乏通用性,具有较大的局限性,维护和管理的难度大,但是CS结构的交互性强,而且使用CS能与本地的硬件进行交互(如小票打印机、银联pos机、钱箱等……)

虽然BS结构有诸多优点,但当遇到需要与硬件进行交互时,并不能完全满足业务需求,故而采用了BS+CS结合的方式,希望能同时具有CS结构的交互性与BS的灵活性,使用JxBrowser后,客户端相当于一个带有谷歌浏览器内核的定制浏览器,负责与硬件(如打印机、钱箱、POS机等)的交互,同时负责业务网页的显示,而业务的处理仍是在服务端后台。

Q:软件的版本迭代是怎么处理的?

客户端的jar包采用第三方插件FxLauncher,在打包时,Fxlauncher会生成一个固定格式的app.xml,app.xml文件中记录了代码的线上地址、每个jar包详情等信息;在客户端启动时,FxLauncher会将本地的app.xml与线上的进行比较,若文件列表中有文件发生变化,则对该文件进行下载覆盖。

其它的文件,如调用银联pos所需的dll文件等,则有自己编写的下载更新模块进行下载与安装

Q:JxBrowser怎么使用?

JxBrowser的下载

https://jxbrowser.support.teamdev.com/support/discussions/forums/9000110576

jxbrowser的破解

(注:破解仅用于技术交流,如有需要还是购买正版的好#手动捂脸)

在jxbrowser的启动类中加入如下代码:

static{try{ Class claz =null;//6.5.1版本破解 兼容xpclaz = Class.forName("com.teamdev.jxbrowser.chromium.aq");//6.21版本破解 默认使用最新的6.21版本// claz = Class.forName("com.teamdev.jxbrowser.chromium.ba");Field e = claz.getDeclaredField("e"); Field f = claz.getDeclaredField("f"); e.setAccessible(true); f.setAccessible(true); Field modifersField = Field.class.getDeclaredField("modifiers"); modifersField.setAccessible(true); modifersField.setInt(e, e.getModifiers() & ~Modifier.FINAL); modifersField.setInt(f, f.getModifiers() & ~Modifier.FINAL); e.set(null,newBigInteger("1")); f.set(null,newBigInteger("1")); modifersField.setAccessible(false); }catch(Exception e) { e.printStackTrace(); logger.error("执行jxbrowser破解程序时出现异常"+LoggerUtil.getErrorMessage(e)); } }

在resources资源文件夹中创建文件夹META-INF,在META-INF文件夹下创建teamdev.licenses文件,将下列信息复制到文件中

Product:JxBrowserVersion:6.xLicensedto:Licensetype:EnterpriseLicenseinfo:JxBrowser LicenseExpirationdate:01-01-9999Support expirationdate:NO SUPPORTGenerationdate:01-01-1970Platforms:win32/x86;win32/x64;mac/x86;mac/x64;linux/x86;linux/x64Companyname:TeamDev Ltd.SigB:1SigA:1

OK,破解好了,到此就可以正常使用了

jxbrowser的6.5.1是最后的支持XP系统的版本,6.21为我下载时的最新版本,根据具体需求选择版本,jxbrowser支持windows、mac、linux,并且都有对应的jar包,jxbrowser.jar为核心jar包,其它的可以根据需求选择性的引入。

通过JxBrowser实现js与java代码进行交互

JxBrowser为Browser对象提供了丰富的监听器,要实现js与java代码的交互,只需在监听器中添加创建对象的代码,window是前端中的window对象,这里是通过jxbrowser浏览器获取到window对象,并对该对象扩展了一个名为jsEntity的对象。当然,JsEntity为自定义的一个实体类,需自行创建,创建对象是为了供前端js调用,而后端调用js,直接使用browser.executeJavaScript()即可,传入方法名与参数

browser.addLoadListener(newLoadAdapter() {@OverridepublicvoidonFinishLoadingFrame(FinishLoadingEvent finishLoadingEvent){super.onFinishLoadingFrame(finishLoadingEvent); JSValue window = browser.executeJavaScriptAndReturnValue("window");//给jswindows对象添加一个扩展的属性JsEntity jsEntity =newJsEntity(); window.asObject().setProperty("jsEntity", jsEntity);//调用前端页面jsbrowser.executeJavaScript("alert('我是后台,我调用了js!')"); } });

这里我选择的是加载事件的监听器,加载事件的监听器中有几个方法:

@OverridepublicvoidonStartLoadingFrame(StartLoadingEvent startLoadingEvent){super.onStartLoadingFrame(startLoadingEvent); }@OverridepublicvoidonProvisionalLoadingFrame(ProvisionalLoadingEvent provisionalLoadingEvent){super.onProvisionalLoadingFrame(provisionalLoadingEvent); }@OverridepublicvoidonFinishLoadingFrame(FinishLoadingEvent finishLoadingEvent){super.onFinishLoadingFrame(finishLoadingEvent); }@OverridepublicvoidonFailLoadingFrame(FailLoadingEvent failLoadingEvent){super.onFailLoadingFrame(failLoadingEvent); }@OverridepublicvoidonDocumentLoadedInFrame(FrameLoadEvent frameLoadEvent){super.onDocumentLoadedInFrame(frameLoadEvent); }@OverridepublicvoidonDocumentLoadedInMainFrame(LoadEvent loadEvent){super.onDocumentLoadedInMainFrame(loadEvent); }

从方法名上很容易能看出来分别是重写了什么事件,只需对需要的方法进行重写即可。

前端js代码:

functionjsToJava(){try{varres = jsEntity.toTest('我是js,我来调用java了'); alert(res); }catch(e){ alert(e); } }js调用java

JsEntity实体类的代码:

publicclassJsEntity{publicStringtoTest(String str){ System.out.println(str);return"I'm ok,真的ok,thank you"; }}

在客户端启动时,浏览器加载完毕后,会弹出“我是后台,我调用了js!”,点击事件发生后,后台会输出被js调用的信息,而同时,浏览器会弹窗“I'm ok,真的ok,thank you”,如果要实现js调用硬件,只需在自定义的实体类中添加java调用硬件的代码即可

到此结束!

欢迎工作一到八年的Java工程师朋友们加入Java高级交流群:828697593

本群提供免费的学习指导 架构资料 以及免费的解答

不懂得问题都可以在本群提出来 之后还会有直播平台和讲师直接交流噢

哦对了,喜欢就别忘了关注一下哦~

转载于:https://blog.51cto.com/14080124/2325020

JxBrowser概述与简单应用相关推荐

  1. 手势识别(一) - 项目概述与简单应用介绍

    我公司的科室开始在公众号上规划一些对外的技术文章了,包括实战项目.模型优化.端侧部署和一些深度学习任务基础知识,而我负责人体图象相关技术这一系列文章,偶尔也会出一些应用/代码解读等相关的文章. 文章在 ...

  2. Flume概述和简单实例

    Flume概述 Flume是一个分布式.可靠.和高可用的海量日志采集.聚合和传输的系统.支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方( ...

  3. (SpringMVC)概述和简单使用

    文章目录 1. 什么是SpringMVC 1.1 概述 1.2 中心控制器 1.3 SpringMVC执行原理 2. 简单使用 2.1 配置版 2.2 注解版 3. 总结 1. 什么是SpringMV ...

  4. 【数据结构笔记32】排序算法概述、简单排序(冒泡排序、插入排序)、逆序对

    本次笔记内容: 9.1.1 概述 9.1.2 冒泡排序 9.1.3 插入排序 9.1.4 时间复杂度下界 文章目录 排序算法前提条件 冒泡排序 插入排序 时间复杂度下界 逆序对(inversion) ...

  5. 遗传算法流程概述与简单实例认知

    目录 目录 介绍 过程概述 流程图 初始种群编码 适应度评估 选择 重组 变异 还有一点- 简单实例 Matlab代码参考 介绍 遗传算法属于优化算法的一种,也归属于启发式算法,具体而言,它是模拟达尔 ...

  6. python爬虫概述及简单实践

    文章目录 一.先了解用户获取网络数据的方式 二.简单了解网页源代码的组成 1.web基本的编程语言 2.使用浏览器查看网页源代码 三.爬虫概述 1.认识爬虫 2.python爬虫 3.爬虫分类 4.爬 ...

  7. MOOC战德臣数据库课程自用笔记_4_SQL概述与简单SQL语句

    SQL 一. SQL概述 集DDL,DML,DCL于一体得数据库语言 1. DDL语句引导词 Create(建立) Alter(修改) Drop(撤销) 模式的定义和删除,包括定义 Database, ...

  8. Java单元测试工具:JUnit4(一)——概述及简单例子

    (一)JUnit概述及一个简单例子 看了慕课网的JUnit视频教程:http://www.imooc.com/learn/356,总结笔记.         这篇笔记记录JUnit的概述,以及一个快速 ...

  9. C语言程序设计-概述、简单程序、数据类型

    目录 第一章 C语言基础知识 1.1 C语言概述 1.1.1 C语言与程序设计 1.1.2 C程序形式和程序执行过程 1.2 简单C程序及其上机步骤 1.2.1 简单C程序和编程风格 1.3 数据类型 ...

最新文章

  1. libIlmImf-2_2.so.22 :cannot open shared object file :No such file or direct
  2. 一文读懂比特币现金(BCH)
  3. Thymeleaf介绍
  4. Ubuntu系统的安装
  5. access建立两个字段唯一索引_关于MongoDB唯一索引(Unique)的那些事
  6. 关掉占用 某端口的进程
  7. 中国加速计算市场第二名,宁畅正领跑“智能算力定制”赛道
  8. 云原生2.0时代下,DevOps实践如何才能更加高效敏捷?
  9. Poj(2679),SPFA,邻接表(主流写法)
  10. 在VC2015里包含了lib库,但没有设置对路径的出错
  11. 嵌入式Linux应用开发
  12. FME模板兴趣班第二期任务小结
  13. 公关广告策略分析:如何结合广告的推力和公关的拉力
  14. 百度鹰眼服务平台部署教程
  15. 联想小新一键恢复小孔_联想一键恢复系统怎么用?小新Air 13 Pro怎么还原操作系统?...
  16. WordPress调用自带的友情链接功能_只在首页显示
  17. 一对一直播技术服务【推广】
  18. JavaScriptAPI编程_History对象(获取浏览历史)
  19. WeX5打包项目为app步骤详解
  20. heatmap热力图

热门文章

  1. vuex modules ajax,VUE项目爬坑---6、vuex的真正存在的意义是什么
  2. 开机一直转圈_电脑开机后网络一直转圈,程序也打不开?
  3. redhat配置oracle yum源,Redhat5和6 YUM源配置的区别
  4. c语言中语句作用,学习C语言的用途~
  5. nginx php value,PHP+NGINX参数优化
  6. Python实现简单的学生管理系统
  7. c语言中的所有关键字,C语言中的32个关键字
  8. c语言 复杂指针声明,C指针复杂声明
  9. 小爱同学100个奇葩回复_小米小爱音箱Pro开箱评测,看到的不仅是全面升级更是小米loT的高速发展...
  10. 【JAVA基础篇】==、equals和hashCode的区别和联系