Bug - Fixed Exceptions in swing, after upgrade swingx

Veracity

Developer
Staff member
Been a long time since I've seen swing errors, but got three today.

Upon login to one of my characters:

Code:
$ java -jar ./dist/KoLmafia-25759.jar


KoLmafia r25759
Build main d04ee0de815aae1211cfe07ade756d668ba4abc2 17 (Eclipse Adoptium 17+35) Mac OS X aarch64 11.6


Currently Running on Mac OS X
Local Directory is /Users/pld/Library/Application Support/KoLmafia
Using Java 17

java.lang.NullPointerException: Cannot load from byte/boolean array because "this.val" is null
    at java.desktop/javax.swing.text.html.parser.ContentModel.first(ContentModel.java:209)
    at java.desktop/javax.swing.text.html.parser.Parser.legalElementContext(Parser.java:759)
    at java.desktop/javax.swing.text.html.parser.Parser.parseContent(Parser.java:2295)
    at java.desktop/javax.swing.text.html.parser.Parser.parse(Parser.java:2372)
    at java.desktop/javax.swing.text.html.parser.DocumentParser.parse(DocumentParser.java:135)
    at java.desktop/javax.swing.text.html.parser.ParserDelegator.parse(ParserDelegator.java:114)
    at java.desktop/javax.swing.text.html.HTMLEditorKit.read(HTMLEditorKit.java:263)
    at java.desktop/javax.swing.plaf.basic.BasicHTML.createHTMLView(BasicHTML.java:72)
    at java.desktop/javax.swing.plaf.basic.BasicHTML.updateRenderer(BasicHTML.java:224)
    at java.desktop/javax.swing.plaf.basic.BasicLabelUI.propertyChange(BasicLabelUI.java:493)
    at java.desktop/java.beans.PropertyChangeSupport.fire(PropertyChangeSupport.java:343)
    at java.desktop/java.beans.PropertyChangeSupport.firePropertyChange(PropertyChangeSupport.java:335)
    at java.desktop/java.beans.PropertyChangeSupport.firePropertyChange(PropertyChangeSupport.java:268)
    at java.desktop/java.awt.Component.firePropertyChange(Component.java:8722)
    at java.desktop/javax.swing.JLabel.setText(JLabel.java:341)
    at net.sourceforge.kolmafia.swingui.panel.DailyDeedsPanel$Daily.setText(DailyDeedsPanel.java:1101)
    at net.sourceforge.kolmafia.swingui.panel.DailyDeedsPanel$FreeFightsDaily.update(DailyDeedsPanel.java:2634)
    at net.sourceforge.kolmafia.swingui.panel.DailyDeedsPanel$InitialUpdateRunnable.run(DailyDeedsPanel.java:983)
    at net.sourceforge.kolmafia.RequestThread$SequencedRunnable.run(RequestThread.java:313)
    at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)
    at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
    at java.base/java.lang.Thread.run(Thread.java:833)
Exited, logged in again, no issue. These happened when I put two items into my shop from the Item Manager frame.
In particular, I filtered inventory with "primitive" (to see Spacegate items), selected two of them, and clicked "Put in Store".

Code:
Exception in thread "AWT-EventQueue-0" java.lang.IndexOutOfBoundsException: valid viewIndex: 0 <= index < 4 but was: 4
    at org.jdesktop.swingx.sort.DefaultSortController.convertRowIndexToModel(DefaultSortController.java:310)
    at java.desktop/javax.swing.JTable.convertRowIndexToModel(JTable.java:2686)
    at java.desktop/javax.swing.JTable.getValueAt(JTable.java:2763)
    at java.desktop/javax.swing.JTable.prepareRenderer(JTable.java:5780)
    at org.jdesktop.swingx.JXTable.prepareRenderer(JXTable.java:3545)
    at java.desktop/javax.swing.plaf.basic.BasicTableUI.paintCell(BasicTableUI.java:2210)
    at java.desktop/javax.swing.plaf.basic.BasicTableUI.paintCells(BasicTableUI.java:2112)
    at java.desktop/javax.swing.plaf.basic.BasicTableUI.paint(BasicTableUI.java:1908)
    at java.desktop/javax.swing.plaf.ComponentUI.update(ComponentUI.java:161)
    at java.desktop/javax.swing.JComponent.paintComponent(JComponent.java:842)
    at java.desktop/javax.swing.JComponent.paint(JComponent.java:1119)
    at java.desktop/javax.swing.JComponent.paintToOffscreen(JComponent.java:5311)
    at java.desktop/javax.swing.RepaintManager$PaintManager.paintDoubleBufferedImpl(RepaintManager.java:1657)
    at java.desktop/javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(RepaintManager.java:1632)
    at java.desktop/javax.swing.RepaintManager$PaintManager.paint(RepaintManager.java:1570)
    at java.desktop/javax.swing.RepaintManager.paint(RepaintManager.java:1337)
    at java.desktop/javax.swing.JComponent._paintImmediately(JComponent.java:5259)
    at java.desktop/javax.swing.JComponent.paintImmediately(JComponent.java:5069)
    at java.desktop/javax.swing.RepaintManager$4.run(RepaintManager.java:879)
    at java.desktop/javax.swing.RepaintManager$4.run(RepaintManager.java:862)
    at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
    at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
    at java.desktop/javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:862)
    at java.desktop/javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:835)
    at java.desktop/javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:784)
    at java.desktop/javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1898)
    at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:318)
    at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:771)
    at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:722)
    at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:716)
    at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
    at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
    at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:741)
    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)

Same thing:

Code:
Exception in thread "AWT-EventQueue-0" java.lang.IndexOutOfBoundsException: valid viewIndex: 0 <= index < 3 but was: 3
    at org.jdesktop.swingx.sort.DefaultSortController.convertRowIndexToModel(DefaultSortController.java:310)
    at java.desktop/javax.swing.JTable.convertRowIndexToModel(JTable.java:2686)
    at java.desktop/javax.swing.JTable.getValueAt(JTable.java:2763)
    at java.desktop/javax.swing.JTable.prepareRenderer(JTable.java:5780)
    at org.jdesktop.swingx.JXTable.prepareRenderer(JXTable.java:3545)
    at java.desktop/javax.swing.plaf.basic.BasicTableUI.paintCell(BasicTableUI.java:2210)
    at java.desktop/javax.swing.plaf.basic.BasicTableUI.paintCells(BasicTableUI.java:2112)
    at java.desktop/javax.swing.plaf.basic.BasicTableUI.paint(BasicTableUI.java:1908)
    at java.desktop/javax.swing.plaf.ComponentUI.update(ComponentUI.java:161)
    at java.desktop/javax.swing.JComponent.paintComponent(JComponent.java:842)
    at java.desktop/javax.swing.JComponent.paint(JComponent.java:1119)
    at java.desktop/javax.swing.JComponent.paintToOffscreen(JComponent.java:5311)
    at java.desktop/javax.swing.RepaintManager$PaintManager.paintDoubleBufferedImpl(RepaintManager.java:1657)
    at java.desktop/javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(RepaintManager.java:1632)
    at java.desktop/javax.swing.RepaintManager$PaintManager.paint(RepaintManager.java:1570)
    at java.desktop/javax.swing.RepaintManager.paint(RepaintManager.java:1337)
    at java.desktop/javax.swing.JComponent._paintImmediately(JComponent.java:5259)
    at java.desktop/javax.swing.JComponent.paintImmediately(JComponent.java:5069)
    at java.desktop/javax.swing.RepaintManager$4.run(RepaintManager.java:879)
    at java.desktop/javax.swing.RepaintManager$4.run(RepaintManager.java:862)
    at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
    at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
    at java.desktop/javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:862)
    at java.desktop/javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:835)
    at java.desktop/javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:784)
    at java.desktop/javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1898)
    at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:318)
    at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:771)
    at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:722)
    at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:716)
    at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
    at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
    at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:741)
    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)
Those are in swingx.
 

heeheehee

Developer
Staff member
Second and third ones definitely look like LockableListModel getting out of sync with one of its views. I have no idea about the first one, or the conditions for it to trigger.

I'll do a clean revert; we can revisit if we decide to replace LockableListModel with something more modern + supported like GlazedLists @MCroft
 
Top