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