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

How to deploy Java Swing Application on Web Browser?

我发现了我刚刚提出的完全相同的问题,但它已有 7 年历史了;所以如果可能的话,我想得到一个 "updated" 的答案。谢谢。

旧时光

作为,以前有两种通过网络部署Swing应用程序的方法:

  • Java Applet 技术
    您的应用将出现在浏览器网页的矩形内。
  • Java Web Start technology
    Clicking a link on a web page would download a copy of your Swing app to the user’s local machine, where your app would then be launched locally using a locally-installed JVM. So your app runs separate from the web browser. This click-to-download-and-run process is defined by Java Network Launching Protocol (JNLP).

这两个都将被淘汰。

➥ 有关详细信息,请参阅 Oracle 发布的白皮书 Java Client Roadmap Update,更新于 2020-05-11。

如今

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

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

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

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

备选方案

您可以考虑以下任何一种选择:

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

OpenWebStart

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

虽然 Oracle 正在逐步淘汰 Java Web Start,但有一个 JSR 56: Java Network Launching Protocol and API called OpenWebStart. See GitHub. This project is currently maintained by the company Karakun, based on the IcedTea-Web core functionality developed at Adoptium (née AdoptOpenJDK).

的开源实现

GraalVM

一个前沿的替代方案是构建一个完全本地代码 ahead-of-time compiled version of your app using GraalVM

Vaadin 流

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

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

在 运行 时,Vaadin 会自动自动生成 HTML、CSS 和 Java 脚本,以便在客户端用户的计算机上远程呈现您的应用程序网络浏览器。因此,您在服务器端有纯 Java,在客户端没有 Java,只有所有现代浏览器内置的 Web standards 技术。

更多信息

所有这些都已在 Stack Overflow 上多次提及。所以搜索以了解更多信息。

有关获取 JVM 以与您的应用捆绑的提示,请参阅

如今,您可以 运行 服务器上的 Swing 应用程序与 UI 在浏览器中。您可以在此处找到示例:https://github.com/JetBrains/projector-demo.