Java JDK 11打破旧的罐子/程序

时间:2019-01-30 11:38:41

标签: java backwards-compatibility java-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 < / strong>”

我知道该类和其他一些Javax类已从JDK 11中删除,因此从开发角度看,如果没有Maven之类的工具,您将无法再使用它们。但是我不明白为什么安装JDK 11会对我的旧jar产生任何影响,因为我没有安装新的JRE,即使附带了新的JRE,它也应该向后兼容吗?

为此,我还使用了Apache NetBeans 10,它与Java 8兼容,但是在我安装JDK 11之后,NetBeans 10仍然可以运行,但是其加载窗口很大且模糊,IDE的图像也很模糊,所有文本更大。

那为什么安装JDK 11对较旧的程序有这些负面影响?

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

2 个答案:

答案 0 :(得分:2)

Java强烈尝试向后兼容,但有时为了发展生态系统,必须进行不向后兼容的更改。到目前为止,它们已作为大版本的一部分发布,例如Java 9、10、11。您最有可能受到Java 11的JEP 320: Remove the Java EE and CORBA Modules的影响。

请记住,Java 8已发布in 2014。五年来,Oracle和社区都为Java 8提供了补丁程序和安全修复程序,但永远无法提供这些补丁程序和安全修复程序。

答案 1 :(得分:1)

您面临的问题很可能不是兼容性问题。字节码。这只是一个缺课。

Java 11放弃了对某些旧技术的支持-例如Java Applets。如果您在Java 11 JDK / JRE中运行Java 8 Applet,则将因为Java 11不提供类/罐而获得ClassNotFound异常。

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

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