gpt4 book ai didi

java - 原因是什么

转载 作者:行者123 更新时间:2023-12-02 00:47:38 24 4
gpt4 key购买 nike

这是我的第一个问题。首先,我是 Java 新手,并且仍在努力理解事件。我有一个带有扩展 AbstractTableModel 的自定义模型的 JTable、一个实现 TableModelListener 的 CustomTableModelHandler 和一个自定义 TableCellRenderer,以显示一些自定义工具提示(来自不同列的数据的组合)。用户只能进行单行选择,我选中了 autocreaterowsorter 选项。删除一行时我使用此方法:

public void removeRow(int modelIndex) {
fireTableRowsDeleted(modelIndex, modelIndex);
rowData.remove(modelIndex);
}

我首先触发数据更改事件的原因是我想使用包含我要删除的行中的数据的文本来更新 JLabel(可能有一种更优雅的方法)。我总是传递模型索引行,我尝试清除 View 中的选择,但这没有帮助。我似乎无法 100% 地重现该错误,但似乎大多数情况下都会在我编辑一行后发生,有一个列排序处于 Activity 状态,然后删除一行(这实际上是错误发生后的操作)发生)。

所以,问题是:我如何知道问题的原因是什么?整个代码有点太大,无法在这里发布,但如果有人想看的话我可以提供。

错误(出现很多次):

run:
Exception in thread "AWT-EventQueue-0" java.lang.IndexOutOfBoundsException: Index: 1, Size: 1
at java.util.ArrayList.RangeCheck(ArrayList.java:547)
at java.util.ArrayList.get(ArrayList.java:322)
at Contacts.ContactsGUI$CustomTableModel.getValueAt(ContactsGUI.java:1975)
at javax.swing.JTable.getValueAt(JTable.java:2686)
at javax.swing.JTable.prepareRenderer(JTable.java:5703)
at javax.swing.plaf.basic.BasicTableUI.paintCell(BasicTableUI.java:2072)
at javax.swing.plaf.basic.BasicTableUI.paintCells(BasicTableUI.java:1974)
at javax.swing.plaf.basic.BasicTableUI.paint(BasicTableUI.java:1770)
at javax.swing.plaf.ComponentUI.update(ComponentUI.java:143)
at javax.swing.JComponent.paintComponent(JComponent.java:752)
at javax.swing.JComponent.paint(JComponent.java:1029)
at javax.swing.JComponent.paintToOffscreen(JComponent.java:5124)
at javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(RepaintManager.java:1479)
at javax.swing.RepaintManager$PaintManager.paint(RepaintManager.java:1410)
at javax.swing.RepaintManager.paint(RepaintManager.java:1224)
at javax.swing.JComponent._paintImmediately(JComponent.java:5072)
at javax.swing.JComponent.paintImmediately(JComponent.java:4882)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:785)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:713)
at javax.swing.RepaintManager.seqPaintDirtyRegions(RepaintManager.java:693)
at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(SystemEventQueueUtilities.java:125)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

最佳答案

你得到

索引越界异常

来自你的堆栈跟踪。这意味着您引用的数组索引大于数组的长度。

这可能是在删除行后发生的。您需要确保当您删除一行时,您注意到删除的行之后的所有行的索引都会改变。

换句话说,如果你有

0 -- 第 1 行
1 -- 第 2 行
2 -- 第 3 行
3 -- 第 4 行

如果删除索引 1 处的行,您的表格将如下所示

0 -- 第 1 行
1 -- row3 <-- 注意更改
2 -- 第 4 行

关于java - 原因是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4486883/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com