浅谈java实现桌面小程序
一直在用java开发web程序, 从maven-web 至springboot ,但是有时候想写一些单机的小程序,作为2022小的flag.
java开发桌面小程序当然不是很好的选择, 所以抛开
-
语言的优越性(学习成本) 内存占用问题 (运行成本) 性能问题 (体验感) 打包大小 (空间占用)
一、套壳web实现
方案一: electron +h5+java
需要1个运行程序(exe) 和1个服务程序(java server) , 通过restful接口或socket 通信,GUI页面和服务完全解耦,需要学习nodejs 、electron相关知识。
方案二:webview+h5+java
借助JavaFX的webview 实现,静态资源与后台程序打包在一起作为web服务访问,但是webview约等于ie11 (稍微好点),需要考虑h5的兼容性。
方案三:jxbrower+h5+java
jxbrower集成chrome的v8引擎,与方案二类似,但是不用考虑h5的兼容性,需要寻找破解资源。上图为该方案实现
方案四:jcef+h5+java
jcef也是集成chrome的v8引擎,与方案三类似,是开源选择,但是性能与稳定性、文档、简易性不及jxbrower (毕竟商用)
二、swing实现
如果对比h5来说,如果想实现上图的效果,我觉得需要了解swing的布局、组件、节点、事件 等等,学习成本不小,感兴趣也可以作为选择。 gif是我在学习swing中一些示例,皮肤和布局都使用第三方包flatlaf和miglayout
<dependency> <groupId>com.formdev</groupId> <artifactId>flatlaf</artifactId> <version>0.38</version> </dependency> <dependency> <groupId>com.miglayout</groupId> <artifactId>miglayout-swing</artifactId> <version>5.2</version> </dependency>
JavaFX实现
可以参考xJavaFxTool项目:
(图片来自xJavaFxTool)
JavaFX是新一代java的GUI开发技术,追求简单、丰富的样式和3D的突破,如果按照前后端的分离来看,其实view层和controller类的解耦是更符合人们期望的一种方式。 但是我不喜欢fxml, 就和我不喜欢jsp一样(但是有时候不得不这么干)。