【发布时间】:2019-01-30 11:38:41
【问题描述】:
据我了解,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"
我了解此类和其他一些 javax 类已从 JDK 11 中删除,因此从开发的角度来看,如果没有 Maven 等工具,您将无法再使用它们。但是我不明白为什么安装 JDK 11 对我的旧 jar 有任何影响,因为我没有安装新的 JRE,即使附带了它,它也应该向后兼容?
另外,我使用的是 Apache NetBeans 10,它在 Java 8 上运行良好,但是在我安装 JDK 11 后,NetBeans 10 仍然运行,但它的加载窗口又大又模糊,IDE 的图像也很模糊,而且所有文字更大。
那么为什么安装 JDK 11 会对旧程序产生这些负面影响?
注意 - 我已经尝试将 jars/EXE 与 JRE 版本 8 (201) 中的 javaw.exe 相关联,但是,它们仍然存在相同的问题。
【问题讨论】:
-
JDK11 应该运行您的旧软件,但它不再包含以前的所有类,尤其是 J2EE。您需要将它们单独添加到类路径中。
-
每个 JDK 包含一个 JRE,根据您选择的安装选项,它会覆盖现有的 JRE 或更改默认的 JRE。
-
您可以像以前一样继续使用JAF,您不需要更改任何代码。相反,您只需要下载 JAF 的独立版本并将其部署在您的类路径上。从 Java SE 中删除 JAF 已经被标记了很长时间。
标签: java backwards-compatibility java-11