我发现了和我刚做的问题完全一样的问题,但它已经7岁了;所以如果可能的话,我想得到一个"更新"的答案。谢谢
过去的日子
正如TrogDor所评论的,以前有两种方法可以通过网络部署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平台模块系统(JSR376(,您现在可以剥离捆绑的JVM和库,只包括特定应用程序实际使用的部分。
近年来,用于打包应用程序的构建工具发展迅速。因此,一定要进行研究,找到最坚固、最现代的工具。
备选方案
你可以考虑以下任何一种选择:
- 远程执行
-
OpenWebStart
Java Web Start的重新实现 -
GraalVM
提前编译Java应用程序的本机代码 -
Vaadin Flow
使用Java构建作为web应用程序交付的桌面式应用程序
远程执行
一些供应商可能会提供一种产品或服务来远程执行您的Swing应用程序,同时在web浏览器中显示用户界面。
其中一家公司是WEBSWING有限公司,其WEBSWING产品。
OpenWebStart
您可能对JavaWebStart技术的单独实现感兴趣。
虽然Oracle正在逐步淘汰Java Web Start,但有一个名为OpenWebStart的JSR56:Java Network Launching Protocol和API开源实现。请参阅GitHub。该项目目前由Karakun公司维护,基于Adoptium(née AdoptOpenJDK(开发的IcedTeaWeb核心功能。
GraalVM
一个前沿的替代方案是使用GraalVM提前构建应用程序的完全本地代码编译版本。
瓦丁流
使用Java构建web应用程序的一种完全不同的方法是VaadinFlow框架。
使用小部件指定用户界面布局的方式与Swing非常相似,指定小部件的排列(按钮、字段、标签等(。您可以使用直接的Java代码、基于XML的描述语言或可视化设计工具来实现这一点。
在运行时,Vaadin会自动生成必要的HTML、CSS和JavaScript,以便在web浏览器内的客户端用户机器上远程呈现您的应用程序。因此,服务器端有纯Java,客户端没有Java,只有内置在所有现代浏览器中的Web标准技术。
更多信息
所有这些都已经在Stack Overflow上进行了多次介绍。因此,搜索以了解更多信息。
有关获得JVM与应用程序捆绑的提示,请参阅由于没有更多的jre 11可供下载,如何使java 11运行时环境正常工作。
如今,您可以在浏览器中使用UI在服务器上运行Swing应用程序。您可以在此处找到示例:https://github.com/JetBrains/projector-demo.
更新:JetBrains停止了投影仪作为单独产品的开发。请参阅他们的通知。他们在Gateway产品中引入了自己使用的技术,用于IDE产品的远程执行。
在浏览器中运行Java Swing应用程序,无需更改应用程序源代码即可使用Webswing-www.Webswing.org这里还有一个例子:https://prototype.webswing.org/webswing-demo/
最佳ig