Error shown after Sample metadata table is filtered/updated
Occasionally this error message is shown after the sample metadata table is updated. It is harmless, after closing error dialog things seem normal.
Describe the dataset used The human dataset from here: http://metnetweb.gdcb.iastate.edu/MetNet_MetaOmGraph.htm
To Reproduce Steps to reproduce the behavior:
- Go to sample metadata table
- Click on Edit->Filter rows
- Perform query
- See error
Expected behavior After the search, the metadata table should be updated and display the retained rows.
Desktop (please complete the following information):
- OS: Windows10
- Java version: 1.8
- Total available memory: 8GB
- CPU and number of cores: Intel i5/4 cores
MOG Error Report
java.lang.ArrayIndexOutOfBoundsException: 4 >= 4 java.base/java.util.Vector.elementAt(Vector.java:463) java.desktop/javax.swing.table.DefaultTableColumnModel.getColumn(DefaultTableColumnModel.java:295) java.desktop/javax.swing.plaf.basic.BasicTableHeaderUI.paint(BasicTableHeaderUI.java:671) java.desktop/javax.swing.plaf.ComponentUI.update(ComponentUI.java:161) java.desktop/javax.swing.JComponent.paintComponent(JComponent.java:797) java.desktop/javax.swing.JComponent.paint(JComponent.java:1074) java.desktop/javax.swing.JComponent.paintToOffscreen(JComponent.java:5255) java.desktop/javax.swing.RepaintManager$PaintManager.paintDoubleBufferedImpl(RepaintManager.java:1643) java.desktop/javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(RepaintManager.java:1618) java.desktop/javax.swing.RepaintManager$PaintManager.paint(RepaintManager.java:1556) java.desktop/javax.swing.RepaintManager.paint(RepaintManager.java:1323) java.desktop/javax.swing.JComponent._paintImmediately(JComponent.java:5203) java.desktop/javax.swing.JComponent.paintImmediately(JComponent.java:5013) java.desktop/javax.swing.RepaintManager$4.run(RepaintManager.java:865) java.desktop/javax.swing.RepaintManager$4.run(RepaintManager.java:848) java.base/java.security.AccessController.doPrivileged(AccessController.java:391) java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85) java.desktop/javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:848) java.desktop/javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:823) java.desktop/javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:772) java.desktop/javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1884) java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:313) java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:770) java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721) java.desktop/java.awt.EventQueue$4.run(EventQueue.java:715) java.base/java.security.AccessController.doPrivileged(AccessController.java:391) java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85) java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:740) java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203) java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124) java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:117) java.desktop/java.awt.WaitDispatchSupport$2.run(WaitDispatchSupport.java:190) java.desktop/java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:235) java.desktop/java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:233) java.base/java.security.AccessController.doPrivileged(AccessController.java:312) java.desktop/java.awt.WaitDispatchSupport.enter(WaitDispatchSupport.java:233) java.desktop/java.awt.Dialog.show(Dialog.java:1070) java.desktop/java.awt.Component.show(Component.java:1716) java.desktop/java.awt.Component.setVisible(Component.java:1663) java.desktop/java.awt.Window.setVisible(Window.java:1021) java.desktop/java.awt.Dialog.setVisible(Dialog.java:1005) edu.iastate.metnet.metaomgraph.AnimatedSwingWorker.start(AnimatedSwingWorker.java:166) edu.iastate.metnet.metaomgraph.ui.MetadataTableDisplayPanel.updateTable(MetadataTableDisplayPanel.java:1203) edu.iastate.metnet.metaomgraph.ui.MetadataTableDisplayPanel.updateTable(MetadataTableDisplayPanel.java:1126) edu.iastate.metnet.metaomgraph.ui.MetaOmTablePanel.updateMetadataTable(MetaOmTablePanel.java:3781) edu.iastate.metnet.metaomgraph.ui.MetadataTreeDisplayPanel.updateTree(MetadataTreeDisplayPanel.java:666) edu.iastate.metnet.metaomgraph.ui.MetaOmTablePanel.updateMetadataTree(MetaOmTablePanel.java:3788) edu.iastate.metnet.metaomgraph.ui.MetadataFilter$2.actionPerformed(MetadataFilter.java:170) java.desktop/javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1967) java.desktop/javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2308) java.desktop/javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:405) java.desktop/javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:262) java.desktop/javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:279) java.desktop/java.awt.Component.processMouseEvent(Component.java:6636) java.desktop/javax.swing.JComponent.processMouseEvent(JComponent.java:3342) java.desktop/java.awt.Component.processEvent(Component.java:6401) java.desktop/java.awt.Container.processEvent(Container.java:2263) java.desktop/java.awt.Component.dispatchEventImpl(Component.java:5012) java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2321) java.desktop/java.awt.Component.dispatchEvent(Component.java:4844) java.desktop/java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4918) java.desktop/java.awt.LightweightDispatcher.processMouseEvent(Container.java:4547) java.desktop/java.awt.LightweightDispatcher.dispatchEvent(Container.java:4488) java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2307) java.desktop/java.awt.Window.dispatchEventImpl(Window.java:2762) java.desktop/java.awt.Component.dispatchEvent(Component.java:4844) java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:772) java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721) java.desktop/java.awt.EventQueue$4.run(EventQueue.java:715) java.base/java.security.AccessController.doPrivileged(AccessController.java:391) java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85) java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:95) java.desktop/java.awt.EventQueue$5.run(EventQueue.java:745) java.desktop/java.awt.EventQueue$5.run(EventQueue.java:743) java.base/java.security.AccessController.doPrivileged(AccessController.java:391) java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85) java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:742) java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203) java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124) java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113) java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109) java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
The problem is with Updating JTable, currently, for every refresh, all the column headers are deleted and readded, Swing repaints/updates the table for every column added. And sometimes when a new column is added, the swing is still updating the table with the old column which results in a race condition between threads of swing. https://stackoverflow.com/questions/5932696/refreshing-jtable-in-swing-gives-exception