JVM桌面框架的状态:简介


第一篇文章是介绍,概述了总体背景,并浏览了我遇到的框架。

背景

让我们面对现实:在Web应用程序与桌面应用程序的斗争中,前者赢了。部署它们的成本更低。这就是人们开始追求它们的原因,尽管当时HTML-JavaScript-CSS组合提供了更差的选择。

Web应用程序现在无处不在:在过去,我什至为不到5个用户开发了Web应用程序。不管它是否值得,我都会把它留给你。

Web应用程序的胜利推动了桌面应用程序的过时。逃脱命运的大多数人都利用Electron框架, 例如 Slack,VS Code,Postman等。JavaScript和Electron具有多个优点:

  1. 许多开发人员都知道JavaScript。基于JS的框架巧妙地利用了这些可用的劳动力。
  2. JavaScript不需要任何平台。此类应用程序是独立的。
  3. 根据MIT许可证,Electron可作为开源使用,并由OpenJS Foundation管理。

另一方面,Electron因资源匮乏而臭名昭著。

AWT and Swing

抽象窗口工具包是最初包含在JDK中的图形框架。AWT依赖于操作系统的本机资源:AWT组件很重。Java 1.2引入了Swing,它是AWT的替代产品,它提供了轻量级的组件。

200

二十年前,我开始学习Java,并尝试学习Swing。但是当时,我在工作期间没有从事任何桌面应用程序项目。我也没有时间进行任何个人附带项目。但是,我的兴趣在那里。

Swing提供了一种自定义应用程序外观的方法。这里有一个默认的LAF,但是也可以使用操作系统LAF。由于Swing本身会绘制组件,即使使用后者,组件也总是看起来与OS本机组件有所不同。IntelliJ IDEA是成功的Java应用程序的著名示例。

多年来,我一直在尝试Swing,但也尝试其他可用选项。

SWT

实际上,第一个这样的选择是对流行的Eclipse IDE的破解。Eclipse既没有使用AWT也没有使用Swing。开发人员设计了他们的图形框架Standard Widget Toolkit。SWT依靠本机库。

Eclipse徽标

狡猾的开发人员利用Eclipse是开放源这一事实在其之上构建他们的应用程序。一段时间后,Eclipse项目正式认可了它。他们致力于改进API,文档,库,并将其称为Rich Client Platform。

这些年来,我在SWT玩过几次。我非常喜欢它使用本机OS组件的方式。那给人一种真正的本土感觉。一个人不知道下面有一个Java应用程序。

Eclipse还在SWT之上发布了称为JFace的更高级别的抽象。不要将其与JSF混淆,它根本不相关。

SWT的最大问题是API不稳定。它起初是一个内部框架,并且显示出来。升级到新的次要版本破坏了我的代码。

对我影响较小的另一个问题是对OS组件的依赖性。Java被设计为跨平台的:因此,每个Java运行时都附带其所安装操作系统的组件绑定。SWT还为每个操作系统(但在JAR级别)具有绑定。因此,应用程序需要为每个需要部署到的OS捆绑一个特定的JAR。

Flex

必须记住15年前的情况。HTML 5仍然是W3C草案。浏览器的HTML显示方式有所不同。有时,他们对JavaScript也有不同的解释。创建一个真正的跨浏览器应用程序是一项巨大的投资。

Adobe Flex徽标

2004年,Macromedia发布了Flex,该框架可以通过以下方式创建Flash应用程序:

  1. 使用特定的FXML模式以XML定义的GUI定义
  2. 用ActionScript编码的行为

唯一的要求是让浏览器具有Flash插件。当时有90%的浏览器已经安装了它!

这些小部件提供了比同等HTML更好的体验。例如,每个年龄段的重型客户端框架上都可以使用组合框过滤功能。过滤并非没有可能,但是与HTML和JavaScript混为一谈。Flex再次使它变得容易。

它还允许开发人员实现即使前端技能不佳也可以接受的应用程序。另外,所有浏览器的外观都是一致的。对我而言,这不仅仅是替代JavaScript细面条代码的替代方案:我相信Flex是构建应用程序的方式。

然后是iPhone。它从台式机到手机,极大地改变了人们使用Web的方式。现在,问题是Flash消耗了很多能量(老实说,这也是一个很大的安全隐患)。史蒂夫·乔布斯(Steve Jobs)禁止从iPhone使用Flash来节省能源。随着移动电话的兴起,Flash对开发人员的吸引力越来越小。

最后,Adobe在2006年收购了Macromedia,并将该技术提供给Apache基金会。恐怕这是结束之前的最后一步:最新版本是2017年,Git存储库中的最新提交已存在9个月了。

Apache Flex徽标

其他尝试

Flash的死亡以及HTML 5和JavaScript的兴起并不是立即发生的。长期以来,没有明确的获胜者。在那个时期,选择一个选择是建筑师的噩梦。

该OpenLaszlo的开源框架试图巧妙地解决这个问题。它提供了开发应用程序的中立模型。在构建时,可以选择Flex或HTML + JavaScript作为目标。

Flash的结束使OpenLaszlo变得无关紧要。

我知道另外两个倡议:

  • Mozilla提出了XUL,这是一种定义图形组件的方法
  • 微软提出了Flex竞争对手Silverlight 两者现在都已过时。

JavaFX徽标

JavaFX也值得一提。1.0版本于2008年发布,当时Flex已经很成熟。这甚至没有可比性。有趣的是,Oracle继续了开发工作:在2010年收购Sun之后,Oracle在2011年发布了2.0。

我的理解是,到目前为止,JavaFX还不属于JDK。胶粘剂公司似乎正在领导其开发工作。它使JavaFX可以作为标准库JAR使用,并在Maven Central上发布(并作为常规下载)。

部署Java桌面应用

正如我已经提到的,与胖客户端相比,Web以前提供的用户体验较差。然而,它赢得了战斗。我相信原因有两个:

  1. 厚客户机是专用于特定的操作系统,或者需要一个平台,比如一个Java运行时环境。
  2. 与在每台用户计算机上相比,将应用程序部署在单个服务器(甚至其中的一个集群)上更容易,并且花费更少的时间 对于内部用户,这两个参数都不成立。公司内部的计算机由sysadmin团队集中管理(或应由其管理)。因此,可以通过网络远程安装任何软件。企业使用这种专用软件已有很长时间了。

在Java世界中,为此专门设计了一些解决方案。

Java Web Start是Sun作为Java平台的一部分提供的解决方案。使用JWS,可以使用JNLP格式创建一个外部部署描述符。描述符定义:要启动的类,可选依赖项,JVM参数等。

然后使描述符文件可公开访问,例如托管在Web服务器上。JWS可以解析它,下载所需的依赖项,然后相应地启动JVM。

可以通过JWS自动更新JAR。JWS只能下载已安装的JAR与要下载的JAR之间的差异。更好的是,如果补丁的大小大于JAR的大小,则会下载后者。

如果应用程序使用共享数据库,则可能会发展模式。例如,如何在不同客户端和数据库之间同步更新?开发团队可以设计应用程序,因此除非它高于特定版本,否则它无法运行。

Oracle在Java 9中弃用了JWS,并将其从Java 11发行版中删除。它现在可作为一个开源项目GPL2和赞助Karakun瑞士公司。

打开Web Start徽标

另一个部署选项可用于使用SWT的应用程序。IDE提供了从配置的远程站点自动下载插件更新的功能。此功能来自名为RCP的模块。安装该应用程序后,RCP将负责下载和安装最新版本。您可以使用RCP来构建应用程序并享受自动更新功能。

结论

Web应用程序赢得了与桌面应用程序的抗争。但是Java桌面应用程序仍然与公司内部相关。所有技术组件均可免费获得:JDK和库。

在本系列的每个以后的文章中,我将使用一种技术开发一个简单的应用程序。下周,我们将看看Swing。


原文链接:http://codingdict.com