Bug - Fixed r20918 keeps crashing on signin

fronobulax

Developer
Staff member
Not sure yet whether the cause is 20918 or 20917 but I am getting debug logs on launch.

net.sourceforge.kolmafia.swingui.ItemManageFrame could not be loaded
class java.lang.reflect.InvocationTargetException: null

net.sourceforge.kolmafia.swingui.ItemManageFrame could not be loaded
class java.lang.IndexOutOfBoundsException: Invalid range

net.sourceforge.kolmafia.swingui.SkillBuffFrame could not be loaded
class java.lang.reflect.InvocationTargetException: null

net.sourceforge.kolmafia.swingui.SkillBuffFrame could not be loaded
class java.lang.IndexOutOfBoundsException: Invalid range


Edit: Does not happen in r20916.
 
r20918 crashes on signin. Using Java 16 from OpenJDK

net.sourceforge.kolmafia.swingui.ItemManageFrame could not be loaded
class java.lang.reflect.InvocationTargetException: null
java.lang.reflect.InvocationTargetException
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:78)
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480)
at net.sourceforge.kolmafia.CreateFrameRunnable.runConstruction(CreateFrameRunnable.java:286)
at net.sourceforge.kolmafia.CreateFrameRunnable.createFrame(CreateFrameRunnable.java:182)
at net.sourceforge.kolmafia.CreateFrameRunnable.run(CreateFrameRunnable.java:164)
at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:306)
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)
Caused by: java.lang.IndexOutOfBoundsException: Invalid range
at java.desktop/javax.swing.DefaultRowSorter.rowsUpdated(DefaultRowSorter.java:907)
at java.desktop/javax.swing.JTable.notifySorter(JTable.java:4266)
at java.desktop/javax.swing.JTable.sortedTableChanged(JTable.java:4123)
at java.desktop/javax.swing.JTable.tableChanged(JTable.java:4400)
at org.jdesktop.swingx.JXTable.tableChanged(JXTable.java:1529)
at java.desktop/javax.swing.table.AbstractTableModel.fireTableChanged(AbstractTableModel.java:302)
at java.desktop/javax.swing.table.AbstractTableModel.fireTableRowsUpdated(AbstractTableModel.java:252)
at com.jgoodies.binding.adapter.AbstractTableAdapter$ListDataChangeHandler.contentsChanged(AbstractTableAdapter.java:283)
at java.desktop/javax.swing.AbstractListModel.fireContentsChanged(AbstractListModel.java:127)
at net.java.dev.spellcast.utilities.LockableListModel.fireContentsChanged(LockableListModel.java:218)
at net.sourceforge.kolmafia.swingui.widget.AutoFilterTextField.update(AutoFilterTextField.java:391)
at net.sourceforge.kolmafia.swingui.panel.ItemManagePanel$FilterItemField.update(ItemManagePanel.java:963)
at net.sourceforge.kolmafia.swingui.panel.ItemManagePanel.filterItems(ItemManagePanel.java:219)
at net.sourceforge.kolmafia.swingui.panel.ItemManagePanel.addFilters(ItemManagePanel.java:214)
at net.sourceforge.kolmafia.swingui.panel.InventoryPanel.addFilters(InventoryPanel.java:141)
at net.sourceforge.kolmafia.swingui.panel.ItemManagePanel.setButtons(ItemManagePanel.java:259)
at net.sourceforge.kolmafia.swingui.panel.InventoryPanel.<init>(InventoryPanel.java:101)
at net.sourceforge.kolmafia.swingui.panel.InventoryPanel.<init>(InventoryPanel.java:70)
at net.sourceforge.kolmafia.swingui.panel.UseItemPanel.<init>(UseItemPanel.java:54)
at net.sourceforge.kolmafia.swingui.ItemManageFrame.<init>(ItemManageFrame.java:138)
at net.sourceforge.kolmafia.swingui.ItemManageFrame.<init>(ItemManageFrame.java:126)
... 21 more
net.sourceforge.kolmafia.swingui.ItemManageFrame could not be loaded
class java.lang.IndexOutOfBoundsException: Invalid range
java.lang.IndexOutOfBoundsException: Invalid range
at java.desktop/javax.swing.DefaultRowSorter.rowsUpdated(DefaultRowSorter.java:907)
at java.desktop/javax.swing.JTable.notifySorter(JTable.java:4266)
at java.desktop/javax.swing.JTable.sortedTableChanged(JTable.java:4123)
at java.desktop/javax.swing.JTable.tableChanged(JTable.java:4400)
at org.jdesktop.swingx.JXTable.tableChanged(JXTable.java:1529)
at java.desktop/javax.swing.table.AbstractTableModel.fireTableChanged(AbstractTableModel.java:302)
at java.desktop/javax.swing.table.AbstractTableModel.fireTableRowsUpdated(AbstractTableModel.java:252)
at com.jgoodies.binding.adapter.AbstractTableAdapter$ListDataChangeHandler.contentsChanged(AbstractTableAdapter.java:283)
at java.desktop/javax.swing.AbstractListModel.fireContentsChanged(AbstractListModel.java:127)
at net.java.dev.spellcast.utilities.LockableListModel.fireContentsChanged(LockableListModel.java:218)
at net.sourceforge.kolmafia.swingui.widget.AutoFilterTextField.update(AutoFilterTextField.java:391)
at net.sourceforge.kolmafia.swingui.panel.ItemManagePanel$FilterItemField.update(ItemManagePanel.java:963)
at net.sourceforge.kolmafia.swingui.panel.ItemManagePanel.filterItems(ItemManagePanel.java:219)
at net.sourceforge.kolmafia.swingui.panel.ItemManagePanel.addFilters(ItemManagePanel.java:214)
at net.sourceforge.kolmafia.swingui.panel.InventoryPanel.addFilters(InventoryPanel.java:141)
at net.sourceforge.kolmafia.swingui.panel.ItemManagePanel.setButtons(ItemManagePanel.java:259)
at net.sourceforge.kolmafia.swingui.panel.InventoryPanel.<init>(InventoryPanel.java:101)
at net.sourceforge.kolmafia.swingui.panel.InventoryPanel.<init>(InventoryPanel.java:70)
at net.sourceforge.kolmafia.swingui.panel.UseItemPanel.<init>(UseItemPanel.java:54)
at net.sourceforge.kolmafia.swingui.ItemManageFrame.<init>(ItemManageFrame.java:138)
at net.sourceforge.kolmafia.swingui.ItemManageFrame.<init>(ItemManageFrame.java:126)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:78)
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480)
at net.sourceforge.kolmafia.CreateFrameRunnable.runConstruction(CreateFrameRunnable.java:286)
at net.sourceforge.kolmafia.CreateFrameRunnable.createFrame(CreateFrameRunnable.java:182)
at net.sourceforge.kolmafia.CreateFrameRunnable.run(CreateFrameRunnable.java:164)
at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:306)
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)
net.sourceforge.kolmafia.swingui.ItemManageFrame could not be loaded
 

heeheehee

Developer
Staff member
A strange observation: if I load the graphical CLI (and therefore the rest of the tabs in the gui) before logging in, everything's fine. But if I let login load all of them, then things break.

Threading bug, perhaps?
 

heeheehee

Developer
Staff member
(Moved some context posts into this thread.)

It looks like Swing just isn't thread-safe. My guess is that before we got "lucky" but something about updating our version of swingx is now stressing Swing to the point that it's consistently running into problems when creating lots of new UI elements, as one might expect in ItemManageFrame.

I don't understand why it's always seemingly happening in the same place in the constructor, though.
 

fronobulax

Developer
Staff member
It looks like Swing just isn't thread-safe

It isn't and that has been documented for a long time. But most of the practical focus on Swing and threads tends to be getting long running, non-GUI tasks off of the Swing thread rather than multi-threaded access to Swing.

Tangentially, I managed to get burned several times because a static analysis suggested some code change was safe to do and moved the codebase towards some kind of better practice. I would do so and then find out that I had broken something that depended upon reflection and thus the static analysis was limited and wrong.
 

heeheehee

Developer
Staff member
So, the simplest thing to do right now is downgrade the jar I pulled in to swingx-1.0, since that was the version that we were already using (according to r11031's description). That seems to work without modification, and is probably what I should've done in the first place.
 

MCroft

Developer
Staff member
Digging in a bit, I'm not crashing with SwingX 1.6, but I am getting a failure in the AWT thread.


Rich (BB code):
net.sourceforge.kolmafia.swingui.ItemManageFrame could not be loaded
class java.lang.IndexOutOfBoundsException: Invalid range
java.lang.IndexOutOfBoundsException: Invalid range
    at java.desktop/javax.swing.DefaultRowSorter.rowsUpdated(DefaultRowSorter.java:907)
    at java.desktop/javax.swing.JTable.notifySorter(JTable.java:4266)
    at java.desktop/javax.swing.JTable.sortedTableChanged(JTable.java:4123)
    at java.desktop/javax.swing.JTable.tableChanged(JTable.java:4400)
    at org.jdesktop.swingx.JXTable.tableChanged(JXTable.java:1529)
    at java.desktop/javax.swing.table.AbstractTableModel.fireTableChanged(AbstractTableModel.java:302)
    at java.desktop/javax.swing.table.AbstractTableModel.fireTableRowsUpdated(AbstractTableModel.java:252)
    at com.jgoodies.binding.adapter.AbstractTableAdapter$ListDataChangeHandler.contentsChanged(AbstractTableAdapter.java:283)
    at java.desktop/javax.swing.AbstractListModel.fireContentsChanged(AbstractListModel.java:127)
    at net.java.dev.spellcast.utilities.LockableListModel.fireContentsChanged(LockableListModel.java:218)
    at net.sourceforge.kolmafia.swingui.widget.AutoFilterTextField.update(AutoFilterTextField.java:358)
    at net.sourceforge.kolmafia.swingui.panel.ItemManagePanel$FilterItemField.update(ItemManagePanel.java:930)
    at net.sourceforge.kolmafia.swingui.panel.ItemManagePanel.filterItems(ItemManagePanel.java:186)
    at net.sourceforge.kolmafia.swingui.panel.ItemManagePanel.addFilters(ItemManagePanel.java:181)

So the panel and thus the frame don't load.
This is similar to but not the same as the problem listed in this thread from 12 years ago (not unlike SwingX 1.6).

glazed list sorting is incompatible with swing/x sorting.Aas JXTable is autocreating sorter is on by default (core is off) that might blow in your context. Try to disable by

Code:
JXTable table = new JXTable();
table.setAutocreateRowSorter(false);
table.setRowSorter(null);
table.setModel(whateverglazedlistmodel);
I haven't experimented with the table properties, but I will...
 
Top