用jcef实现客户端跨平台
客户端编程从vb、vc++、c#,拖控件确实是很爽的一件事。但是客户端控件有个比较麻烦的问题,就是控件风格样式不好改,控件自定义比较困难。
作为一个偏向后端的开发,当客户的需求现有的控件实现不了,然后满世界找符合的UI库。整天关注这些界面问题真的很耗时间。
好在现在有一种更简单的开发方式,通过嵌套浏览器的方式来实现界面。互联网的发展,让网页这种交互让用户潜移默化地接受,而且js各种UI库,也让开发变得方便。
mvvm模式使得更换控件变得更加方便。虽然客户端也有mvvm模式,不过每一个语言一种模板,学习曲线过于陡峭。
说了这么多嵌套浏览器的优点,缺点也是有的,就是加载网页和渲染网页速度不及原生控件。内嵌浏览器,对html5兼容和支持程度和浏览器相比略逊一筹。
具体还是需要开发人员根据自身技能和实际业务进行取舍。
如果客户端需要跨平台,目前主流嵌套浏览器的做法有pyqt和electron。对于C#/java程序员来说通常能同时掌握html/js,但会js不等同于会nodejs,面向网页编程都是不涉及io的。引入python和nodejs更多还是未知带来的不可控风险。
java也是一门跨平台语言。之前也想过直接用javafx的webview,不过html5兼容性实在是太差了,js复杂还会崩溃。虽然网上有推荐jxbrowser,不过商用就不考虑了。由于在c#有过cefsharp的经验,所以找java的cef。
java-cef https://bitbucket.org/chromiumembedded/java-cef ,我很佩服这个作者。但是基础控件你不能只上传源码吧,网上编译教程好几页,各种编译工具,不同平台还得各自搞一个,简直是劝退。我相信大部分人只是想引用直接就能用,没多少人会想改源码再编译的。
终于最后找到一个编译好直接能用的 https://github.com/jcefbuild/java-cef-build/releases/ 直接根据你的平台下载release包。
具体使用步骤:
在pom.xml中通过引用本地jar包的方式引入bin目录下除了jcef-tests.jar的其他jar包,jar包是跨语言的,我试过只用win32的能直接在linux上跑。记得打包要同时打包本地jar包。
idea添加library,将bin/lib/win32文件夹添加libraries(具体文件名看你用的哪个平台),这样就可以本地调试了。32位要选32位的jdk运行,64位的选64位的jdk运行。
打包后通过以下命令运行,在linux下 -Djava.library.path必须是绝对目录,不然会找不到目录
java -Djava.library.path=../libs/jcef/lib/win32 -jar xxx.jar