我们有一个基于桌面的 Swing 应用程序在 oracle jdk1.8 上运行良好。迁移到 openjdk11 后,我们得到了com.sun.java.swing.Painter类的一些未找到异常,我们通过生成一个包含一些 com.sun.java.swing.Painter.java 类和一些 4- 类的包 jar 来解决这个问题5个班级,并由
java --patch-module java.desktop=custombundle.jar -classpath path_of_jars starter_class
现在,在 Windows 系统上使用 AdoptOpenJDK11 或 opendjdk11 一切正常。但是在 linux(ubnutu-64 位或任何基于 ARM 的 linux 环境)上,我们从我们使用的第三方库中找到了另一个未找到的类/没有与com.sun.java.swing.plaf.windows.WindowsLookAndFeel相关的类定义异常。
我们无法删除对 com.sun.java.swing.plaf.windows.WindowsLookAndFeel 的调用,因为它们位于第 3 方库中。该公司提供的库和其他论坛网站建议添加:
--add-exports java.desktop/com.sun.java.swing.plaf.windows=ALL-UNNAMED
java --add-exports java.desktop/com.sun.java.swing.plaf.windows=ALL-UNNAMED --patch-module java.desktop=custombundle.jar -classpath path_of_jars starter_class
但添加后会收到警告,例如
警告: com.sun.java.swing.plaf.windows 包不在 java.desktop 中
我们仍然得到 com.sun.java.swing.plaf.windows.WindowsLookAndFeel 的类未找到异常
我尝试了 java.desktop/com.sun.java.swing.plaf.gtk 而不是 java.desktop/com.sun.java.swing.plaf.windows,警告消失但仍然无法正常工作。有什么建议么?
采用Openjdk版本:最新(11.0.8.10)
Ubuntu:20.04(最近)
注意:Java 10 上的 Swing 问题没有帮助