我们有一个基于桌面的 swing 应用程序,可以在 Oracle JDK 1.8 上正常运行。迁移到 OpenJDK 11 后,我们遇到了一些未找到的类异常com.sun.java.swing.Painter
,我们通过生成一个包含一些类的捆绑 jar 来解决这个问题com.sun.java.swing.Painter.java
和一些 4-5 类并添加它
java --patch-module java.desktop=custombundle.jar -classpath path_of_jars starter_class*
现在,Windows 系统上的 AdoptOpenJDK11 或 OpenJDK11 一切正常。但在 Linux(Ubuntu-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*
但添加此后会收到警告,例如
WARNING: package com.sun.java.swing.plaf.windows not in java.desktop
我们仍然得到类未发现异常com.sun.java.swing.plaf.windows.WindowsLookAndFeel
I tried java.desktop/com.sun.java.swing.plaf.gtk
代替java.desktop/com.sun.java.swing.plaf.windows
,警告消失但仍然不起作用。有什么建议么?
采用OpenJDK版本:最新(11.0.8.10)
Ubuntu:20.04(最新)
Note: Java 10 上的 Swing 问题 https://stackoverflow.com/questions/51555030/swing-issue-on-java-10没有帮助