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
- Workaround for issue #566 Issue #566 is caused by the Darklaf theme, which uses internal Swing APIs in its implementation (weisJ/darklaf#234). Starting with OpenJDK 16, access to them is restricted u... — committed to maehne/logisim-evolution by maehne 3 years ago
- Menu: Safely check type of 'checkIconFactory' factory property As the type can only mismatch when darklaf is being uninstalled we don't care what happens in this case. Simply don't crash. Moreover th... — committed to weisJ/darklaf by weisJ 3 years ago
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=permitshould 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
Im working on publishing the necessary dependency to maven central, so the necessity of providing a token can be lifted.
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#L73It 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.