Как обработать отсутствующие классы Swing plaf.windows в Java 11? - PullRequest
0 голосов
/ 08 октября 2019

Я перевожу многоплатформенное настольное приложение (Windows и Linux) из java8 в OpenJDK 11. Код расширяет класс Swing, и для этого мы определяем новый класс, который расширяет внутренний класс API WindowsTabbedPaneUI. Этот класс используется, когда приложение работает в Windows.

Код выполняет следующие действия:

   ...
   if (this.getUI() instanceof WindowsTabbedPaneUI) {
       this.setUI(new CustomWindowsTabbedPaneUI());
   }
   ...

, где CustomWindowsTabbedPaneUI расширяется WindowsTabbedPaneUI.

Это работалохорошо с java 8. Однако теперь, когда я запускаю java 11 jre, выдается следующее исключение:

java.lang.Exception: java.lang.NoClassDefFoundError: com/sun/java/swing/plaf/windows/WindowsTabbedPaneUI

Я пытался использовать опции --add-opens и --add-exports при запуске приложения. но я не мог заставить это работать. Я понимаю, что причина в том, что Linux JRE для Java 11 не включает этот класс. Я полагаю, что это так, поскольку при выполнении команды ниже не перечисляется пакет com.sun.java.swing.plaf.windows:

java --describe-module java.desktop

Любая помощь приветствуется.

...