Java JDK 11 破旧 Jars/Programs

Java JDK 11 Breaking Old Jars/Programs

据我了解,Java JRE 是向后兼容的,如果您在 Java (JDK) 7 中编写程序,它将 运行 与 Java (JRE) 8.

我有几个我在 Java 8 开发的程序,还有我在完成它们时构建的 .jar 和 EXE 文件,它们总是 运行 很好。但是,安装 Java JDK 11 (11.0.2) 后,这些旧的 .jar 文件会损坏...

我知道这个 class 和其他一些 javax classes 已从 JDK 11 中删除,因此从开发的角度来看,如果没有工具,您将无法再使用它们比如马文。但是我不明白为什么安装 JDK 11 对我的旧 jar 有任何影响,因为我没有安装新的 JRE,即使有一个也应该是向后兼容的?

此外,我使用 Apache NetBeans 10,它在 Java 8 上运行良好,但在我安装 JDK 11 之后,NetBeans 10 仍然 运行 但它正在加载 window 又大又模糊,IDE 的图像模糊,所有文字都变大了。

那么为什么安装 JDK 11 会对旧程序产生这些负面影响?

注意 - 我已尝试将 jars/EXEs 与 JRE 版本 8 (201) 中的 javaw.exe 相关联,但是,它们仍然存在相同的问题。

您面临的问题可能不是不兼容问题 w.r.t。字节码。只是少了一个 class.

Java 11 放弃了对一些旧技术的支持 - 例如 Java 小程序。如果您 运行 Java 8 小程序在 Java 11 JDK / JRE 中,您将得到一个 ClassNotFound 异常,因为 Java 11 不提供 class/罐.

与 JavaFX 类似,它仍然存在,但不再是 Java 发行版的一部分。您必须将其添加为单独的 Jar。

我相信可以将这些 class 添加到项目中。我个人希望看到一个端口。

Java 试图向后兼容,但有时需要进行重大更改才能发展生态系统。到目前为止,重大更改随主要版本一起发布,例如Java 9、10、11。在您的情况下,您很可能受到 Java 11 的 JEP 320: Remove the Java EE and CORBA Modules.

的影响

记得 Java 8 已发布 in 2014。 5 年来,Oracle 和 Java 社区为 Java 8 提供了补丁和安全修复,但永远这样做是不可能的。