要了解Java桌面应用程序有什么问题,让我们看一下JavaFX(桌面应用程序的领先UI框架)的新功能。 很明显,它正在向Web方法发展,从Web世界中借用了越来越多的功能。 JavaFX支持一部分CSS功能,并附带其自己的属性。
但是,这一切都与网络为UI提供的功能相去甚远。 另一个重要方面是工具。 您是否看到过与开发人员工具以及用于桌面UI设计的所有流行Web浏览器一起出现的任何东西? 最后,随着JNLP在Java 9中被弃用 ,它肯定不会在桌面上添加点。
但是,为什么台式机仍在运转? Web方法覆盖了一些非常重要的事情:
- 离线模式
- 与外围设备的高级集成
- 本地数据/文件处理
使用新的Web标准(例如Service Worker)可以部分解决这些问题,但是如果我们能够实现将Web UI开发技术和工具引入桌面Java应用程序的技术,那就太好了。 如果我告诉您市场上有一款应用程序能做到这一点怎么办?
什么是电子?
这就是Electron的用武之地。它以前被称为Atom Shell,是GitHub Atom编辑器的一项技术。 Atom是第一个使用HTML,JavaScript,CSS和Node.js集成构建的广为人知的桌面应用程序。
Electron是一个开放源代码框架,允许使用Web技术开发桌面GUI应用程序。 您可以使用最初为Web应用程序开发的前端和后端组件:JS用于后端,HTML / CSS / JS用于前端。
简而言之,Electron由两个主要组件组成:Node.js后端以及单个可执行文件中的Chromium Web浏览器,以及其他桌面集成:本机菜单,通知,任务栏图标,安装程序等。
为什么我们需要这种方法?
首先,我们可以解决当前Java桌面UI世界的许多问题:
- Java桌面技术没有发展
- 与Web相比,Java可用UI库的集合要小得多
- 使用JavaFX很难实现响应式,丰富的UI
除此之外,电子生态系统还具有许多有用的工具:
- 适用于所有主要操作系统的安装程序
- 平滑的自动更新子系统
- 崩溃报告
最后,它是一种开源技术,并且是现代UI的前沿。
只有一个小问题……电子完全与JS有关。
有两种方法使其适合Java应用程序:
- 使用GWT客户端构建应用程序并将其编译为JS
- 在服务器端Java框架中编写代码,并将servlet容器捆绑在应用程序内部
如果我们想通过Java代码提供高级硬件集成和本地文件系统访问,则方法1不是可行的方法。
第二种方法可以使用嵌入式的servlet容器(如Jetty)和Java进程的自动启动/停止过程来实现。 因此,我们将在客户端PC上具有功能齐全的Java流程,并且能够同时使用Java和Electron功能。 好吧,事实证明,这很容易做到!
我将在 GitHub上 提供的教程中向您展示为桌面应用程序制作自己的UI工具包的完整分步过程 。 检查一下,看看如何在桌面应用程序中利用网络技术的力量:
混合方法的好处
将Web应用程序包装在本机应用程序中的混合方法有什么好处?
- 我们拥有对台式机的完全访问权限:硬件,文件系统,安装,通知以及与操作系统的集成。
- 我们可以使用JS / CSS开发UI小部件,同时将Java用于业务逻辑。
- 我们可以重用现有的JS / CSS库和方法。
- 我们甚至可以捆绑现有的Vaadin应用程序以供桌面使用!
我们如何在现实生活中使用它?
CUBA Studio是基于CUBA平台的功能强大的企业应用程序开发工具。 使用Studio,应用程序可在数分钟内启动并运行。
我们已经将Vaadin用于CUBA Studio已有4年了,并且一直以来,它都是一个在本地运行的Web应用程序,但是在Web浏览器中显示UI。
今年,我们推出了新版本的CUBA Studio,该版本使用Electron为我们的用户带来更好的UX。 它使开发人员无需网络浏览器即可将CUBA Studio用作独立的桌面应用程序。 我们可以利用操作系统的所有优点,例如任务栏,使用快捷方式在应用程序之间快速切换以及在关闭窗口时关闭应用程序。
让我如此高兴的是,我们将现有的Java代码捆绑在一起而没有任何更改! 好吧,几乎没有变化。 当然,我们改善了几件事。
通过这种方法,我们可以:
- 桌面集成:任务栏,窗口切换,关闭时关闭
- Chromium for UI的所有功能,包括CSS动画,Canvas甚至WebGL
- 浏览器的受控版本,因此在Chrome更新的情况下不会破坏应用程序。 更重要的是,我们在发布之前测试了相同版本的UI引擎。
在下一版本中,我们计划引入新功能:
- 多窗口支持
- 有关构建/部署事件的桌面通知
- 流畅的自动更新
这些功能可用,因为我们不再受网络浏览器的限制。
结论
综上所述,Electron在现代桌面应用程序框架市场上已成为非常强大的参与者。 这是一种有趣的方法,可以利用Java Web技术的最新功能来帮助Java应用程序在桌面上外观和性能更好。
您可以在GitHub上找到具有本文中描述的所有技巧的更复杂的应用程序: https : //github.com/jreznot/electron-java-app
如果您想尝试基于这种方法的应用程序,我建议您看看CUBA Studio SE 。
翻译自: https://www.javacodegeeks.com/2018/06/desktop-uis-web-technologies.html