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能與本地的硬件進行交互(如小票打印機、銀聯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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/537373.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/537373.shtml
英文地址,請注明出處:http://en.pswp.cn/news/537373.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

我的達內Java培訓經歷

我當時2009年參加達內培訓是在學校里,達內與我們學校合作。當時培訓班只開了一個班,有位班主任,因為是第一屆,學生也少,不到20個,所以不是老師現場教的,看視頻學習的,視頻是錄播的。班主任負責培訓班日常管理工作,和技術答疑。培訓視頻是投影儀放。當時培訓java基礎的…

小米大數據:借助Apache Kylin打造高效、易用的一站式OLAP解決方案

如今的小米不僅是一家手機公司,更是一家大數據與人工智能公司。隨著小米公司各項業務的快速發展,數據中的商業價值也愈發突顯。而與此同時,各業務團隊在數據查詢、分析等方面的壓力同樣正在劇增。因此,為幫助公司各業務線解決這些…

舊電腦升級Win11

2014年的聯想Y430P升級成功 升級很簡單 第一步:下載win11系統安裝包,下載地址:系統之家 - Win11系統 第二步:下載KMS激活工具,下載地址:https://www.jb51.net/softs/668522.htmlhttps://www.jb51.net/sof…

進程池的用法

apply() 函數原型: apply(func[, args()[, kwds{}]]) 該函數用于傳遞不定參數,主進程會被阻塞直到函數執行結束(不建議使用,并且3.x以后不在出現)。 apply_async() 函數原型: apply_async(func[, args()[, …

巧刪無法刪除的文件

遇到無法刪除的文件,電腦上沒有文件粉碎工具,或文件粉碎工具也刪不掉,怎么辦? 很簡單: 把文件的后綴名改掉,比如改成doc,重啟電腦,再刪除

萬用表測線路斷點位置_如何測出電線電纜斷點在哪?來看看常見的7種方法

實際工程維護檢修中,對于維修人員來說最怕的莫過于碰到電線電纜中間斷了找不出斷點在什么地方。雖然我們弱電工程實際維修的時候,碰到線纜問題會直接想辦法換線或者重新敷設,但是我們今天討論技術上有哪些方法可以測出線纜的斷點!…

12.04個人博客

地點:自習室 事件:召開小組會議,進項任務分配轉載于:https://www.cnblogs.com/qingjia/p/10145891.html

你真的會用OneNote嗎?

你真的會用OneNote嗎?_程序媛一枚-CSDN博客前言特色功能圖片轉文字TAB制表符新建表格表格嵌套自動編號保存微信文稿樹形目錄基本功能總結前言使用OneNote做筆記已經有一年多的時間了,從最開始的抵觸,到現在的習慣,心態的轉變主要是…

樂學python_鐵樂學python_day01-作業

第一題:使用while循環輸入 1 2 3 4 5 6 8 9 10# 使用while循環輸入 1 2 3 4 5 6 8 9 10count 0while (True) :count count 1#判斷當count等于7的時候,返回循環最初,不執行下面的打印等語句if count 7:continueprint (count)#判斷當count等…

大道至簡: 拉新、促活和留存

互聯網運營中的拉新、促活和留存思維,從來不局限于互聯網產品里,在傳統行業里也是通用的,比如一家理發店的經營也是如此。 互聯網運營中的拉新、促活和留存思維,從來不局限于互聯網產品里,在傳統行業里也是通用的。比如…

python3的pyqt5 qtablewidget按數據大小排列_InnoDB為什么要選擇B+樹來存儲數據?

關于InnoDB索引,我們可能知道InnDB索引是用B樹實現的,而B樹就是一種能優化查詢速度的數據結構。但我們又沒想過這樣一個問題,能優化查詢速度的數據結構有很多,為什么InnoDB要采用B樹?常見優化查詢速度數據結構哈希表哈…

數據倉如何支撐應用?

數據倉支撐應用,主要有以下步驟: 1.應用部門:在“寧波市公共數據目錄平臺”按需申請省市共享數據,申請的表審批通過后,提交《審批通過的表清單》給大數據中心; 2.大數據中心:比對《審批通過的…

辛苦倆月總結的面試題,掌握它懟翻面試官不是夢~

小編經過一個多月的不懈努力,給大家總結了一份面試方面的題目。這份面試題涉及高并發、分布式、高可用相關知識點,在此分享給大家,希望大家能拿到一份理想的 Offer!因為是筆試題目,大家可以先做。如果需要查看答案&…

python坐標轉化極坐標_python 坐標系

廣告關閉提供包括云服務器,云數據庫在內的50款云計算產品。打造一站式的云產品試用服務,助力開發者和企業零門檻上云。寫在前面的話01 今天資源君帶大家學習一下python的可視化,何謂可視化呢? 我們常常聽說python的數據分析&#…

百家號 不被推薦,原因:將舊聞冒充新聞發布,請修改后重新發布

1.情景展示 在百家號進行創作的作者,發布文章時,難免會遇到審核不通過,下面說一下其中一種情況: 不被推薦,原因:將舊聞冒充新聞發布,請修改后重新發布. 2.解決方案 出現這種情況,原…

java字符串常量池——字符串==比較的一個誤區

轉自:https://blog.csdn.net/wxz980927155/article/details/81712342 起因 再一次js的json對象的比較中,發現相同內容的json對象使用比較并不相等。 例如: var obj {}; var obj2 {}; console.log(obj obj2); // 結果為false json在js中代表…

java注解_Java注解教程及自定義注解

Java注解提供了關于代碼的一些信息,但并不直接作用于它所注解的代碼內容。在這個教程當中,我們將學習Java的注解,如何定制注解,注解的使用以及如何通過反射解析注解。Java1.5引入了注解,當前許多java框架中大量使用注解…

Git設置忽略eclipse配置文件

概述 eclipse的配置文件是不能公用的,不同電腦上的eclipse配置文件內容是不一樣的,如果將eclipse配置文件上傳到了git,其他開發下載后,導入項目,有些報錯就是因為配置文件關系 操作 在git的忽略文件“.gitignore”里…

MySQL 時間函數

A. timestampdiff() 傳三個參數,第一個時間類型如年,月,日,第二個開始時間,第三個結束時間select test_name, timestampdiff(YEAR,create_time,end_time) y_date from test_table; --計算時間 -------------------| te…