借助Web技术,桌面用户界面将保持活跃

要了解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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/347021.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Win10窗口侧边栏设置Win7模式

本人非常不喜欢Win10的几个系统功能 贴靠窗口时自动调整窗口大小,填满可用空间关将窗口对齐时,显示能够在其旁边对齐的内容当我调整某个贴靠窗口的大小时,也调整任何相邻贴靠窗口的大小 想调整成Win7那种模式和风格的话,设置如下…

VS2017无法打开文件MSVCRTD.lib

需要添加组件,如下图

【定时同步系列4】QPSK调制+OM定时(FFT实现及频域补偿)+信号分段处理+误码率曲线之MATLAB仿真(复信号模型)

关注公号【逆向通信猿】更精彩!!! 仿真结果 对于QPSK调制,仿真结果如下: **分析:**可以看出,补偿前的定时相位约为-0.1,补偿后的相位在0附近波动,但由于没有进行环路滤波(可采用卡尔曼滤波器),所以波动很大,这也导致了后续解调结果不理想,实际中必须加入滤波器…

【锁相环系列2】数字判决反馈环之BPSK信号解调MATLAB仿真(含环路滤波器参数设置)

关注公号【逆向通信猿】更精彩!!! 仿真结果 频偏补偿之前的星座图,是一个“环”。 频偏补偿后的BPSK信号星座图 解调误码率曲线 <

hadoop emr_在Amazon EMR上运行Hadoop MapReduce作业

hadoop emr不久前&#xff0c;我发布了如何使用CLI设置EMR群集的信息。 在本文中&#xff0c;我将展示如何使用适用于AWS的Java SDK来设置集群。 展示如何使用Java AWS开发工具包执行此操作的最佳方法是展示我认为完整的示例&#xff0c;因此让我们开始吧。 设置一个新的Maven…

【MFC系列2】Win32项目转换为MFC项目

关注公号【逆向通信猿】更精彩&#xff01;&#xff01;&#xff01; 一、MFC的组成 a)必须有一个CWinApp的派生类&#xff1b; b)必须用派生类在全局定义一个对象theApp; c)在派生类中必须重写InitInstance虚函数&#xff1b; d)MFC程序就用CWinApp派生类中的InitInstance虚…

servlet面试常问问题_50个Servlet面试问答

servlet面试常问问题Servlet是Java EE的一个非常重要的主题&#xff0c;所有Web应用程序框架&#xff08;例如Spring和Struts&#xff09;都建立在它之上。 这使servlet成为Java访谈中的热门话题。 在这里&#xff0c;我提供了50个servlet面试问题的列表&#xff0c;并提供了答…

Win10图片查看器打不开图片,报错内存不足

关注公号【逆向通信猿】更精彩&#xff01;&#xff01;&#xff01; 按如下设置即可

学习Java的最佳方法

Java是某些人可能会说很难学习的语言之一&#xff0c;而其他人则认为它与其他语言具有相同的学习曲线。 两种观察都是正确的。 但是&#xff0c;由于Java具有平台无关性&#xff0c;因此在语言方面具有相当大的优势。 Java是一种低级语言&#xff0c;它以一种简单的方式来实现…

CSAPP:Attack lab

关注公号【逆向通信猿】更精彩&#xff01;&#xff01;&#xff01; 原文地址&#xff1a;https://www.jianshu.com/p/db731ca57342 本文介绍的是CSAPP书籍中的第三个lab: Attack lab。通过这个lab我们能够更加清楚和深入的了解到缓冲区溢出的隐患&#xff0c;以及如何利用缓…

Spring休眠教程

1.简介 在本文中&#xff0c;我们将演示如何利用最流行的ORM&#xff08;对象关系映射&#xff09;工具之一的Hibernate的功能 &#xff0c;该工具可将面向对象的域模型转换为传统的关系数据库。 Hibernate是目前最流行的Java框架之一。 由于这个原因&#xff0c;我们在Java Co…

无状态会话的ejb_Java EE状态会话Bean(EJB)示例

无状态会话的ejb在本文中&#xff0c;我们将了解如何在简单的Web应用程序中使用状态会话Bean来跟踪客户端会话中的状态。 1.简介 有状态会话Bean通常保存有关特定客户端会话的信息&#xff0c;并在整个会话中保留该信息&#xff08;与无状态会话Bean相对&#xff09;。 有状态…

Maven教程之春

1.简介 在本文中&#xff0c;我们将演示如何针对非常特定的用例对Spring使用Maven依赖项。 我们使用的所有库的最新版本都可以在Maven Central上找到。 对于一个有效的构建周期而言&#xff0c;了解Maven依赖项的工作方式以及如何对其进行管理非常重要&#xff0c;并且对于在我…

java微妙_编码Java时的10个微妙的最佳实践

java微妙这是10条最佳实践的列表&#xff0c;这些最佳实践比您的平均Josh Bloch有效Java规则要微妙得多。 尽管Josh Bloch的列表很容易学习&#xff0c;并且涉及日常情况&#xff0c;但此处的列表包含了涉及API / SPI设计的较不常见的情况&#xff0c;尽管这些情况可能会产生很…

GraphQL在Wildfly群上

“ GraphQL是API的查询语言&#xff0c;是用于使用现有数据完成这些查询的运行时。 GraphQL为您的API中的数据提供了一个完整且易于理解的描述&#xff0c;使客户能够准确地询问他们所需的内容&#xff0c;仅此而已&#xff0c;使随着时间的推移更容易开发API并启用强大的开发人…

javafx 示例_示例介绍:JavaFX 8打印

javafx 示例我有一段时间没有写博客了&#xff0c;我想与其他人分享有关JavaFX的所有信息&#xff08;我的日常工作和家庭可能是借口&#xff09;。 对于那些对此博客不熟悉的人 &#xff0c;我是JavaFX 2 Introduction by Example&#xff08;JIBE&#xff09;的作者&#xff…

Spring Data JPA教程

在Java类或对象与关系数据库之间管理数据是一项非常繁琐且棘手的任务。 DAO层通常包含许多样板代码&#xff0c;应简化这些样板代码&#xff0c;以减少代码行数并使代码可重复使用。 在本教程中&#xff0c;我们将讨论Spring数据的JPA实现。 1.简介 1.1什么是JPA&#xff1f;…

使用storm 实时计算_使用Storm进行可扩展的实时状态更新

使用storm 实时计算在本文中&#xff0c;我将说明如何借助Storm框架以可扩展且无锁定的方式在数据库中维护实时事件驱动流程的当前状态。 Storm是基于事件的数据处理引擎。 它的模型依赖于基本原语&#xff0c;例如事件转换&#xff0c;过滤&#xff0c;聚合……&#xff0c;我…

【多元域乘法】多项式乘法电路原理及MATLAB详解

关注公号【逆向通信猿】更精彩!!! 关于二元域上的两个元素的乘法、多项式除法,在之前的博客 【有限域除法】二元多项式除法电路原理及MATLAB详解 子程序:sub_poly_div.m 【有限域元素加法和乘法】有限域元素加法和乘法的原理及MATLAB实现 子程序:sub_gf_add.m、sub_gf_…

my CSAPP Attack lab堆栈详解

关注公号【逆向通信猿】更精彩!!! 这个实验时学习了简书上的一篇文章后,自己根据课程例子进行的一次小测试,phase 4和5的堆栈图解还没有画,等后续有时间会进行补充。 本人转载的简书原文: https://blog.csdn.net/wlwdecs_dn/article/details/121249364#comments_19237…