darklaf: Java 16 bugs

DarkLaf seems to be breaking with Java 16.

A user reported a bug to me which seems to only happen when running on Java 16 and is fixed on 15.

Stacktrace:

Exception in thread "AWT-EventQueue-0" java.lang.IllegalAccessError: class com.github.weisj.darklaf.ui.label.DarkLabelUI (in unnamed module @0x76f2bbc1) cannot access class sun.swing.SwingUtilities2 (in module java.desktop) because module java.desktop does not export sun.swing to unnamed module @0x76f2bbc1
        at com.github.weisj.darklaf.ui.label.DarkLabelUI.paint(DarkLabelUI.java:83)
        at java.desktop/javax.swing.plaf.ComponentUI.update(ComponentUI.java:161)
        at java.desktop/javax.swing.JComponent.paintComponent(JComponent.java:797)
        at java.desktop/javax.swing.JComponent.paint(JComponent.java:1074)
        at java.desktop/javax.swing.JComponent.paintChildren(JComponent.java:907)
        at java.desktop/javax.swing.JComponent.paint(JComponent.java:1083)
        at java.desktop/javax.swing.JComponent.paintChildren(JComponent.java:907)
        at java.desktop/javax.swing.JComponent.paint(JComponent.java:1083)
        at java.desktop/javax.swing.JLayeredPane.paint(JLayeredPane.java:586)
        at java.desktop/javax.swing.JComponent.paintChildren(JComponent.java:907)
        at java.desktop/javax.swing.JComponent.paintToOffscreen(JComponent.java:5271)
        at java.desktop/javax.swing.RepaintManager$PaintManager.paintDoubleBufferedImpl(RepaintManager.java:1643)
        at java.desktop/javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(RepaintManager.java:1618)
        at java.desktop/javax.swing.RepaintManager$PaintManager.paint(RepaintManager.java:1556)
        at java.desktop/javax.swing.RepaintManager.paint(RepaintManager.java:1323)
        at java.desktop/javax.swing.JComponent.paint(JComponent.java:1060)
        at java.desktop/java.awt.GraphicsCallback$PaintCallback.run(GraphicsCallback.java:39)
        at java.desktop/sun.awt.SunGraphicsCallback.runOneComponent(SunGraphicsCallback.java:75)
        at java.desktop/sun.awt.SunGraphicsCallback.runComponents(SunGraphicsCallback.java:112)
        at java.desktop/java.awt.Container.paint(Container.java:2003)
        at java.desktop/java.awt.Window.paint(Window.java:3949)
        at java.desktop/javax.swing.RepaintManager$4.run(RepaintManager.java:876)
        at java.desktop/javax.swing.RepaintManager$4.run(RepaintManager.java:848)
        at java.base/java.security.AccessController.doPrivileged(AccessController.java:391)
        at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
        at java.desktop/javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:848)
        at java.desktop/javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:823)
        at java.desktop/javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:772)
        at java.desktop/javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1884)
        at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:316)
        at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:770)
        at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
        at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:715)
        at java.base/java.security.AccessController.doPrivileged(AccessController.java:391)
        at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
        at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:740)
        at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
        at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
        at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
        at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
        at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
        at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
Exception in thread "AWT-EventQueue-0" java.lang.IllegalAccessError: class com.github.weisj.darklaf.ui.text.DarkTextFieldUI (in unnamed module @0x76f2bbc1) cannot access class sun.swing.SwingUtilities2 (in module java.desktop) because module java.desktop does not export sun.swing to unnamed module @0x76f2bbc1
        at com.github.weisj.darklaf.ui.text.DarkTextFieldUI.getVisibleEditorRect(DarkTextFieldUI.java:145)
        at com.github.weisj.darklaf.ui.text.DarkTextFieldUI.getVisibleEditorRect(DarkTextFieldUI.java:139)
        at java.desktop/javax.swing.plaf.basic.BasicTextUI.modelToView(BasicTextUI.java:1107)
        at java.desktop/javax.swing.plaf.basic.BasicTextUI.modelToView(BasicTextUI.java:1087)
        at java.desktop/javax.swing.text.DefaultCaret.setVisible(DefaultCaret.java:981)
        at java.desktop/javax.swing.text.DefaultCaret.focusGained(DefaultCaret.java:352)
        at java.desktop/java.awt.AWTEventMulticaster.focusGained(AWTEventMulticaster.java:228)
        at java.desktop/java.awt.AWTEventMulticaster.focusGained(AWTEventMulticaster.java:227)
        at java.desktop/java.awt.Component.processFocusEvent(Component.java:6506)
        at java.desktop/java.awt.Component.processEvent(Component.java:6373)
        at java.desktop/java.awt.Container.processEvent(Container.java:2264)
        at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:4993)
        at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2322)
        at java.desktop/java.awt.Component.dispatchEvent(Component.java:4825)
        at java.desktop/java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1950)
        at java.desktop/java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:1055)
        at java.desktop/java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:679)
        at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:4874)
        at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2322)
        at java.desktop/java.awt.Component.dispatchEvent(Component.java:4825)
        at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:772)
        at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
        at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:715)
        at java.base/java.security.AccessController.doPrivileged(AccessController.java:391)
        at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
        at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:95)
        at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:745)
        at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:743)
        at java.base/java.security.AccessController.doPrivileged(AccessController.java:391)
        at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
        at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:742)
        at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
        at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
        at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
        at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
        at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
        at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
Exception in thread "AWT-EventQueue-0" java.lang.IllegalAccessError: class com.github.weisj.darklaf.ui.label.DarkLabelUI (in unnamed module @0x76f2bbc1) cannot access class sun.swing.SwingUtilities2 (in module java.desktop) because module java.desktop does not export sun.swing to unnamed module @0x76f2bbc1
        at com.github.weisj.darklaf.ui.label.DarkLabelUI.paint(DarkLabelUI.java:83)
        at java.desktop/javax.swing.plaf.ComponentUI.update(ComponentUI.java:161)
        at java.desktop/javax.swing.JComponent.paintComponent(JComponent.java:797)
        at java.desktop/javax.swing.JComponent.paint(JComponent.java:1074)
        at java.desktop/javax.swing.JComponent.paintChildren(JComponent.java:907)
        at java.desktop/javax.swing.JComponent.paint(JComponent.java:1083)
        at java.desktop/javax.swing.JComponent.paintChildren(JComponent.java:907)
        at java.desktop/javax.swing.JComponent.paint(JComponent.java:1083)
        at java.desktop/javax.swing.JLayeredPane.paint(JLayeredPane.java:586)
        at java.desktop/javax.swing.JComponent.paintChildren(JComponent.java:907)
        at java.desktop/javax.swing.JComponent.paint(JComponent.java:1083)
        at java.desktop/javax.swing.JComponent.paintToOffscreen(JComponent.java:5264)
        at java.desktop/javax.swing.RepaintManager$PaintManager.paintDoubleBufferedImpl(RepaintManager.java:1643)
        at java.desktop/javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(RepaintManager.java:1618)
        at java.desktop/javax.swing.RepaintManager$PaintManager.paint(RepaintManager.java:1556)
        at java.desktop/javax.swing.RepaintManager.paint(RepaintManager.java:1323)
        at java.desktop/javax.swing.JComponent._paintImmediately(JComponent.java:5212)
        at java.desktop/javax.swing.JComponent.paintImmediately(JComponent.java:5022)
... (90 lines left)

I’m guessing that this was caused by JDK-8256299 (JEP 396).

Additional Information:

  • Darklaf Version: Latest

About this issue

  • Original URL
  • State: closed
  • Created 3 years ago
  • Comments: 27 (18 by maintainers)

Commits related to this issue

Most upvoted comments

I am aware of the compatibility issues with the module system introduced in Java 9 (see #171). For now starting the application with --illegal-access=permit should solve the problem. I would highly appreciate any help in removing internal API calls from the codebase.

That works very nicely! Thank you very much! 😃

a005d5224a1e789557dc53ae6dd0ce310ad01642 should address the issue with non-tooltip popups. I have released a new snapshot with the fix. Now onto the tooltip issue

How ridiculous, apparently you need a github token to even install a github package.

Im working on publishing the necessary dependency to maven central, so the necessity of providing a token can be lifted.

Anyway, here is a new recording: https://youtu.be/jjJMRCK9_JA.

Thanks. Could you also run it using LafManager.setLogLevel(Level.Fine). Just add the line here: https://github.com/weisJ/darklaf/blob/75b585a8e67d62bc35fb3b9f8a85a0644df32f73/core/src/test/java/com/github/weisj/darklaf/ui/ComponentDemo.java#L73

It seems to be working well however there is some flickering and it sometimes works weirdly. For the most part its fine though. Here is a video: https://youtu.be/EWjiiTIy6Vk.

$ uname -a
Linux kitchen 5.12.11-arch1-1 #1 SMP PREEMPT Wed, 16 Jun 2021 15:25:28 +0000 x86_64 GNU/Linux
$ java --version
openjdk 16.0.1 2021-04-20
OpenJDK Runtime Environment (build 16.0.1+9)
OpenJDK 64-Bit Server VM (build 16.0.1+9, mixed mode)