JxBrowser的概述与简单应用

JxBrowser的概述与简单应用Q JxBrowser 是什么 JxBrowser 是一个跨平台的 Java 库 允许将基于 GoogleChromi 的 Web 浏览器组件集成到 JavaSwing AWT JavaFX 应用程序中 使用 JxBrowser 您可以将轻量级 Swing JavaFX 组件嵌入到 Java 应用程序中 以显示现代网页 支持最新的 Web 标准 如 HTML5 CSS3 JavaScript 等 Q 为什么

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怎么使用?
  1. JxBrowser的下载
    https://jxbrowser.support.teamdev.com/support/discussions/forums/

  2. jxbrowser的激活成功教程
    (注:激活成功教程仅用于技术交流,如有需要还是购买正版的好#手动捂脸)
    在jxbrowser的启动类中加入如下代码:




static { try { Class claz = null; //6.5.1版本激活成功教程 兼容xp claz = 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, new BigInteger("1")); f.set(null, new BigInteger("1")); modifersField.setAccessible(false); } catch (Exception e) { e.printStackTrace(); logger.error("执行jxbrowser激活成功教程程序时出现异常"+LoggerUtil.getErrorMessage(e)); } } 

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

Product: JxBrowser Version: 6.x Licensed to: License type: Enterprise License info: JxBrowser License Expiration date: 01-01-9999 Support expiration date: NO SUPPORT Generation date: 01-01-1970 Platforms: win32/x86;win32/x64;mac/x86;mac/x64;linux/x86;linux/x64 Company name: TeamDev Ltd. SigB: 1 SigA: 1 

OK,激活成功教程好了,到此就可以正常使用了

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

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

 @Override public void onStartLoadingFrame(StartLoadingEvent startLoadingEvent) { super.onStartLoadingFrame(startLoadingEvent); } @Override public void onProvisionalLoadingFrame(ProvisionalLoadingEvent provisionalLoadingEvent) { super.onProvisionalLoadingFrame(provisionalLoadingEvent); } @Override public void onFinishLoadingFrame(FinishLoadingEvent finishLoadingEvent) { super.onFinishLoadingFrame(finishLoadingEvent); } @Override public void onFailLoadingFrame(FailLoadingEvent failLoadingEvent) { super.onFailLoadingFrame(failLoadingEvent); } @Override public void onDocumentLoadedInFrame(FrameLoadEvent frameLoadEvent) { super.onDocumentLoadedInFrame(frameLoadEvent); } @Override public void onDocumentLoadedInMainFrame(LoadEvent loadEvent) { super.onDocumentLoadedInMainFrame(loadEvent); } 
 js调用java 

JsEntity实体类的代码:

public class JsEntity { public String toTest(String str){ System.out.println(str); return "I'm ok,真的ok,thank you"; } } 

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

到此结束!

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

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/198916.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月26日 下午2:14
下一篇 2026年3月26日 下午2:14


相关推荐

  • 【笔记】《adobe premiere cc PR入门基础教程,新手入门系列》

    【笔记】《adobe premiere cc PR入门基础教程,新手入门系列》视频 B 站有 很基础的教程 记录关键词 日后检索可以用 看完只能做出粗糙的剪辑 要做到精细且高效还需要结合项目继续学习 1 基础知识 像素像素长宽比 RGB 通道 通道 透明信息颜色 色相 饱和度 亮度 RGB 图像 YUV 相机监视器素材序列素材箱时间轨道音频 nbsp 2 基本流程导入素材构建序列粗剪精简序列备份颜色调整 nbsp 3 工作界面 Ctrl 单击标签拖出窗口工作区右击复位效果控件标记面板导入项目工作区 nbsp 4

    2026年3月26日
    1
  • The Class File Viewer cannot handle the given input

    The Class File Viewer cannot handle the given inputThe Class File Viewer cannot handle the given input

    2022年4月24日
    75
  • clion永久激活码3月最新在线激活

    clion永久激活码3月最新在线激活,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月15日
    100
  • 自动化测试平台(八):列表组件公共化封装和用例项目管理功能开发

    自动化测试平台(八):列表组件公共化封装和用例项目管理功能开发上一章我们完成了整个用户管理模块的功能,能够正确的增、删、改、查用户。但其中有很多判断实际上是其他类似的模块也会有的,例如:1.创建用户后回到首页刷新列表;2.删除次页最后一条数据,回到前一页刷新列表;3.查询条件的格式化;—难道我们每写一个类似的模块,都要去写一遍这些重复的逻辑代码吗?显然是没必要的,所以我们需要将其抽离成公共列表组件提供给其他模块使用,避免大量的做重复的事情,并让代码更容易维护。本章还将完成用例项目管理功能,它主要用于管理不同类型(API、UI),不同项目

    2022年6月25日
    22
  • Nano Banana Pro的真正极限,藏在Lovart里

    Nano Banana Pro的真正极限,藏在Lovart里

    2026年3月15日
    1
  • 高等数学:第五章 定积分(2)换元积分法 分部积分法 广义积分

    高等数学:第五章 定积分(2)换元积分法 分部积分法 广义积分§5.4  定积分的换元法一、换元公式【定理】若1、函数在上连续;2、函数在区间上单值且具有连续导数;3、当在上变化时,的值在上变化,且 ,  则有                          (1)证明:(1)式中的被积函数在其积分区间上均是连续,故(1)式两端的定积分存在。且(1)式两端的被积函数的原函数均是存在的。假设是在上的一个原函数,据

    2025年5月26日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号