如何在 Web 浏览器上部署 Java Swing 应用程序?

Tia*_*Tia 0 java applet swing web-deployment web

我发现了我刚刚提出的完全相同的问题,但它已经 7 岁了;所以如果可能的话,我想有一个“更新”的答案。谢谢。

Bas*_*que 5

过去

正如TrogDor 评论的那样,以前有两种方法可以通过 Web 部署 Swing 应用程序:

  • Java Applet技术
    您的应用程序将出现在网页上的一个矩形内,在浏览器中。
  • Java Web Start技术
    单击网页上的链接会将您的 Swing 应用程序的副本下载到用户的本地计算机,然后您的应用程序将在本地使用本地安装的JVM 启动。因此,您的应用程序与 Web 浏览器分开运行。这个点击下载并运行的过程是由Java 网络启动协议 (JNLP)定义的。

这两者都将被逐步淘汰。

? 详情请参见Oracle 发布的白皮书Java Client Roadmap Update,更新于 2020-05-11。

如今

现代方法是构建Swing和/或JavaFX应用程序,然后使用打包工具进行部署以包含 JVM。您最终会得到一个完整的自包含自启动应用程序。

这意味着您需要多个构建版本,为您的用户可能部署的每个平台(macOS、Linux、BSD、Windows 等)创建一个应用程序。虽然这对您来说是一个额外的负担,但另一方面是您可以准确控制用于运行应用程序的 Java 版本。

由于Java 9 及更高版本中的Java 平台模块系统( JSR 376 ),您现在可以剥离捆绑的 JVM 和库以仅包含特定应用程序实际使用的部分。

近年来,用于打包应用的构建工具发展迅速。因此,请务必进行研究以找到最强大和现代的工具。

备择方案

您可以考虑以下任何一种替代方案:

  • OpenWebStart Java Web Start 的
    重新实现
  • GraalVM
    提前编译 Java 应用程序的本机代码
  • Vaadin Flow
    使用 Java 构建作为 Web 应用程序交付的桌面风格应用程序

OpenWebStart

您可能对Java Web Start技术的单独实现感兴趣。

虽然 Oracle 正在逐步淘汰Java Web Start,但有一个JSR 56:Java 网络启动协议和 API的开源实现,称为OpenWebStart。请参阅GitHub。该项目目前由公司保持Karakun的基础上,IcedTea项目的Web在开发核心功能(姓AdoptOpenJDK)Adoptium

虚拟机

一个前沿的替代方案是使用GraalVM构建一个完全本机代码的提前编译版本的应用程序。

瓦丁流

使用 Java 构建 Web 应用程序的一种完全不同的方法是Vaadin Flow框架。

您可以以与Swing非常相似的方式使用小部件指定用户界面布局,指定小部件的排列(按钮、字段、标签等)。您可以使用您选择的直接 Java 代码、基于 XML 的描述语言或可视化设计工具来实现。

在运行时,Vaadin 会自动生成在 Web 浏览器中在客户端用户计算机上远程呈现您的应用程序所需的 HTML、CSS 和 JavaScript。因此,您在服务器端拥有纯 Java,而在客户端没有 Java,只有所有现代浏览器中内置的Web 标准技术。

更多信息

所有这些已经在 Stack Overflow 上多次讨论过。所以搜索以了解更多信息。

有关获取 JVM 以与您的应用程序捆绑在一起的提示,请参阅如何使 java 11 运行时环境正常工作,因为不再有 jre 11 可供下载?.