java - Java JDK 11 打破旧的罐子/程序
问题描述
据我了解,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 相关联,但是,它们仍然存在相同的问题。
解决方案
Java 试图向后兼容,但有时需要进行重大更改来发展生态系统。到目前为止,主要版本(例如 Java 9、10、11)都附带了重大更改。在您的情况下,您很可能受到 Java 11 的JEP 320:删除 Java EE 和 CORBA 模块的影响。
请记住,Java 8 是在 2014年发布的。5 年来,Oracle 和 Java 社区为 Java 8 提供了补丁和安全修复,但永远这样做是不可能的。
推荐阅读
- google-data-studio - DataStudio SUM 文本字段(如果包含“utm_source = 'google'”)[关闭]
- java - 这个 DateTime 的 JSON 格式模式是什么?
- python - 将 Python Tkinter IntVar() 列表转换为常规 int 列表?
- azure - Azure B2C 与 Azure 应用程序网关和基于路径的后端池
- python - Pandas:从数据框中删除大量重复数字的重复项
- ssl - 通过 SSL 使用 JDBC 和 PySpark
- python - 标准化或标准化分类值
- c++ - 对浮点值数组求和的最快方法
- android - 类型不匹配:推断类型为
但上下文是预期的 - django - 删除并重新创建表后,Django/slite3 manage.py migrate 不起作用