场景:
我的公司正在维护一个小程序,该小程序可以通过 Java Web Start 被许多机器使用。
Java Web Start 由 JNLP 文件触发,该文件包含启动小程序的所有信息和参数。
我唯一可以访问的是用于启动小程序的 JNLP 文件。小程序本身及其使用的所有 JAR 都位于远程服务器上。
问题:
公司要求我开发一个启动器来执行这个小程序,而无需使用 Java Web Start 或任何类型的浏览器。
由于我只有 JNLP 文件可用,是否可以构建这样的启动器?如果可能的话,有人知道我应该做什么吗?我一直在到处寻找解决方案,但找不到。
在 Java 9 中弃用后,Java applet 已被 Oracle 和所有 Web 浏览器制造商逐步淘汰。此外,Java Web Start 在 Java 9 中已被弃用,然后在 Java 11 中被逐步淘汰。
我看到了一些迁移选项。
您可以坚持使用 Java 8。它与 appletviewer 工具捆绑在一起,无需任何网络浏览器即可运行小程序。
Oracle 已逐步淘汰 Java Web Start。请参阅 2020 年 5 月白皮书,Java 客户端路线图更新。
然而,这项技术仍然存在。另一种开源实现正在进行中:OpenWebStart。
您的小程序可能是使用 Swing GUI 框架编写的。如果是这样,那么将该小程序制作成独立的 Swing 应用程序就非常简单了。
一旦将其作为 Swing 应用程序运行,您就可以使用 jlink 工具捆绑 JVM。然后使用 jpackage 工具打包为可双击的应用程序。
如果您想走得更远,您可以走向技术的前沿:使用 GraalVM 技术构建本机应用程序。
另一种方法是将您的应用程序重写为网络应用程序。
通过 Vaadin Flow 框架,您可以使用类似的布局管理器和类似的事件驱动小部件将每个屏幕的包含事件驱动小部件的 Swing 布局管理器重建到 Vaadin Flow 屏幕中。尽管不是一对一的替代,但 Swing 和 Vaadin Flow 之间的基本概念相似。
您使用纯 Java 编写 Vaadin Flow 应用程序,也许还使用少量 CSS 来实现可选样式。然后,您可以部署到 Jakarta Servlet 容器,在该容器中将应用程序提供给 Web 浏览器。浏览器中的用户界面仅使用标准 Web 技术(HTML、CSS、JavaScript、Web Push 等)自动生成 - 客户端无需使用 Java。