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 文件会损坏...
- 其中一些仍然 运行,但它们的 GUI 已经扩展,按钮和图像比以前更大,并且在某些情况下变得模糊
- 一个程序根本 运行 根本没有,试图在控制台中 运行 它会出现异常:“ 线程异常 "AWT-EventQueue-0" java.lang.NoClassDefFoundError: javax/activation/ActivationDataFlavor"
我知道这个 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 提供了补丁和安全修复,但永远这样做是不可能的。
据我了解,Java JRE 是向后兼容的,如果您在 Java (JDK) 7 中编写程序,它将 运行 与 Java (JRE) 8.
我有几个我在 Java 8 开发的程序,还有我在完成它们时构建的 .jar 和 EXE 文件,它们总是 运行 很好。但是,安装 Java JDK 11 (11.0.2) 后,这些旧的 .jar 文件会损坏...
- 其中一些仍然 运行,但它们的 GUI 已经扩展,按钮和图像比以前更大,并且在某些情况下变得模糊
- 一个程序根本 运行 根本没有,试图在控制台中 运行 它会出现异常:“ 线程异常 "AWT-EventQueue-0" java.lang.NoClassDefFoundError: javax/activation/ActivationDataFlavor"
我知道这个 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 提供了补丁和安全修复,但永远这样做是不可能的。