JxBrowser概述与简单应⽤
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能与本地的硬件进⾏交互(如⼩票打印机、银联、钱箱等……)
虽然BS结构有诸多优点,但当遇到需要与硬件进⾏交互时,并不能完全满⾜业务需求,故⽽采⽤了BS+CS结合的⽅式,希望能同时具有CS结构的交互性与BS的灵活性,使⽤JxBrowser后,客户端相当于⼀个带有⾕歌浏览器内核的定制浏览器,负责与硬件(如打印机、钱箱、POS机等)的交互,同时负责业务⽹页的显⽰,⽽业务的处理仍是在服务端后台。
Q:软件的版本迭代是怎么处理的?
客户端的jar包采⽤第三⽅插件FxLauncher,在打包时,Fxlauncher会⽣成⼀个固定格式的l,l⽂件中记录了代码的线上地址、每个jar包详情等信息;在客户端启动时,FxLauncher会将本地的l与线上的进⾏⽐较,若⽂件列表中有⽂件发⽣变化,则对该⽂件进⾏下载覆盖。
其它的⽂件,如调⽤银联pos所需的dll⽂件等,则有⾃⼰编写的下载更新模块进⾏下载与安装
Q:JxBrowser怎么使⽤?
1. JxBrowser的下载
2. jxbrowser的破解
(注:破解仅⽤于技术交流,如有需要还是购买正版的好#⼿动捂脸)
在jxbrowser的启动类中加⼊如下代码:
static {
try {
Class claz = null;
//6.5.1版本破解兼容xp
claz = Class.forName("amdev.jxbrowser.chromium.aq");
//6.21版本破解默认使⽤最新的6.21版本
// claz = Class.forName("amdev.jxbrowser.chromium.ba");
Field e = DeclaredField("e");
Field f = DeclaredField("f");
e.setAccessible(true);
f.setAccessible(true);
Field modifersField = DeclaredField("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();
<("执⾏jxbrowser破解程序时出现异常"+ErrorMessage(e));
}
}
在resources资源⽂件夹中创建⽂件夹META-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,破解好了,到此就可以正常使⽤了
jxbrowser的6.5.1是最后的⽀持XP系统的版本,6.21为我下载时的最新版本,根据具体需求选择版本,jxbrowser⽀持windows、mac、linux,并且都有对应的jar
包,jxbrowser.jar为核⼼jar包,其它的可以根据需求选择性的引⼊。
3. 通过JxBrowser实现js与java代码进⾏交互
JxBrowser为Browser对象提供了丰富的,要实现js与java代码的交互,只需在中添加创建对象的代码,window是前端中的window对象,这⾥是通过jxbrowser 浏览器获取到window对象,并对该对象扩展了⼀个名为jsEntity的对象。当然,JsEntity为⾃定义的⼀个实体类,需⾃⾏创建,创建对象是为了供前端js调⽤,⽽后端调⽤js,直接使⽤uteJavaScript()即可,传⼊⽅法名与参数
browser.addLoadListener(new LoadAdapter() {
@Override
public void onFinishLoadingFrame(FinishLoadingEvent finishLoadingEvent) {
JSValue window = uteJavaScriptAndReturnValue("window");
//给jswindows对象添加⼀个扩展的属性
JsEntity jsEntity = new JsEntity();
window.asObject().setProperty("jsEntity", jsEntity);
//调⽤前端页⾯js
}
});
这⾥我选择的是加载事件的,加载事件的中有⼏个⽅法:
@Override
public void onStartLoadingFrame(StartLoadingEvent startLoadingEvent) {
}
@Override
public void onProvisionalLoadingFrame(ProvisionalLoadingEvent provisionalLoadingEvent) {
}
@Override
public void onFinishLoadingFrame(FinishLoadingEvent finishLoadingEvent) {
}
@Override
public void onFailLoadingFrame(FailLoadingEvent failLoadingEvent) {
}
@Override
public void onDocumentLoadedInFrame(FrameLoadEvent frameLoadEvent) {
}
@Override
public void onDocumentLoadedInMainFrame(LoadEvent loadEvent) {
}
从⽅法名上很容易能看出来分别是重写了什么事件,只需对需要的⽅法进⾏重写即可。
前端js代码:
<script>
怎么用java编写app软件function jsToJava(){
try{
var res = Test('我是js,我来调⽤java了');
alert(res);
}catch(e){
alert(e);
}
}
</script>
<body onclick="jsToJava()">
js调⽤java
</body>
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调⽤硬件的代码即可
到此结束!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论