CheerpJ:能在浏览器中运行现代Java应用


CheerpJ 是一种在浏览器上以 WebAssembly 和 JavaScript 运行未经修改的 Java 应用程序的解决方案。
它基于两个组件:WebAssembly 和 JavaScript 中的完整 Java 运行时环境,以及 JavaScript 编译器的提前 Java 字节码。通过结合这两个元素,CheerpJ 提供了一个环境,可以将任何类型的 Java 应用程序(独立、Java Applet、Java 库)作为纯 HTML5 Web 应用程序运行。
CheerpJ 最初是在大约 5 年前发布的,受到 许多大型组织的信任, 可以:

  1. 保留对关键内部 Java 客户端(Java 小程序和独立应用程序)的访问,无需依赖旧版浏览器,也无需客户端 Java 安装;
  2. 将现有的 Java 产品转换为 HTML5,并作为基于浏览器的体验提供给外部用户;
  3. 将复杂的 Java 组件集成为 Web 应用程序的一部分

100% 兼容 Java 8 语言(包括反射和所有动态特性),以及完整的 Java 8 运行时,它可以运行任何应用程序,包括 Swing 客户端、AWT 客户端和任何复杂的框架,包括 Oracle Forms。

100% 兼容 Java 8 语言(包括反射和所有动态特性),以及完整的 Java 8 运行时,它可以运行任何应用程序,包括 Swing 客户端、AWT 客户端和任何复杂的框架,包括 Oracle Forms。

CheerpJ 2.3 是市场上唯一能够以像素级精确度将真实的大型 Java 应用程序迁移到现代 HTML5 的解决方案。

点击标题

Reddit网友
1、还记得applet?我们难道绕了一圈?

2、我使用TeaVM(可用于任何JVM字节码)的运气非常好。我用它来转译RuneScape的客户端:http://game.openrsc.com/play/preservation/members
(https://github.com/2003scape/mudclient177-deob-teavm)。
相比之下,CheerpJ慢得令人发指,但我是在几年前试用的。
JSweet是另一个选择,但它不遵守与Java相同的类型(一个整数被转译为IEEE754数字),所以它更像TypeScript而不是TeaVM或CheerpJ。

不确定小程序或摇摆程序是否可以在TeaVM中使用,但将相同的API与本地浏览器或画布API结合起来并不难。我在这里为一个非常小的子集做了这件事。

3、这些演示需要时间来加载,但一旦加载,它们似乎运行得相当好。https://leaningtech.com/swing-demo/
但仍不确定其意义何在。Webswing也用纯HTML5来做这个https://prototype.webswing.org/javafx/

4、Webswing在服务器上运行java代码,对吗?我认为CheerpJ的java代码是在客户的浏览器中下载和执行的。
也许这就是为什么它需要更长的时间来启动。需要下载并做一些初始化?
webswing似乎对所有的东西都做往返运输。

5、能在技术上用这个在浏览器中运行Minecraft java吗?
这是一个令人惊讶的问题,不幸的是,Minecraft不是一个100%的Java应用程序,因为它使用本地代码来访问OpenGL。因此,它不能用CheerpJ开箱即用地运行。

6、它的工作原理是,它有一个WASM引擎来运行应用程序,其结果被绘制在html画布上。
这是一项令人印象深刻的技术,可以确保传统的和swing awt的应用程序以最小的代码变化工作。
糟糕的是(以前是,现在可能会改变),它需要很多改进。WASM的实现运行得不够快,没有足够的内存和cpu核心容量,也没有加速功能。
应用程序通过套接字的通信通常会像大多数传统的应用程序一样被破坏,端口开放和稳定性,所以最好使用Rest。
除此以外,它拥有巨大的潜力。