我已经构建了3个Glazedlist表。当用户点击第一个表的行时,它会在第二个表中显示列表。 当单击第二个表中的行时,它将替换第3个表中的其他列表。 问题是当我单击第一个表格中的第一行时,有时会出现异常。
有没有人知道为什么我会得到IndexOutOfBoundsException以及如何摆脱它?
Exception in thread "AWT-EventQueue-1" java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
at java.util.ArrayList.RangeCheck(ArrayList.java:546)
at java.util.ArrayList.get(ArrayList.java:321)
at ca.odell.glazedlists.impl.gui.ThreadProxyEventList.applyChangeToCache(ThreadProxyEventList.java:175)
at ca.odell.glazedlists.impl.gui.ThreadProxyEventList.access$600(ThreadProxyEventList.java:68)
at ca.odell.glazedlists.impl.gui.ThreadProxyEventList$UpdateRunner.listChanged(ThreadProxyEventList.java:237)
at ca.odell.glazedlists.event.ListEventAssembler$ListEventFormat.fire(ListEventAssembler.java:412)
at ca.odell.glazedlists.event.ListEventAssembler$ListEventFormat.fire(ListEventAssembler.java:409)
at ca.odell.glazedlists.event.SequenceDependenciesEventPublisher$SubjectAndListener.firePendingEvent(SequenceDependenciesEventPublisher.java:445)
at ca.odell.glazedlists.event.SequenceDependenciesEventPublisher.fireEvent(SequenceDependenciesEventPublisher.java:344)
at ca.odell.glazedlists.event.ListEventAssembler.commitEvent(ListEventAssembler.java:316)
at ca.odell.glazedlists.impl.gui.ThreadProxyEventList$UpdateRunner.run(ThreadProxyEventList.java:225)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:461)
at di.pri.debutil.gui.debEventQueue.dispatchEvent(debEventQueue.java:63)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)
代码:
// build the table
EventList<Treat> TreatEventList = summaryModel.getTreatEvenList();
String[] propertyNames = new String[]{"PlanId", "Number", "Type","dication","stimulation","dication2","Date","Outcome","rank","version"};
String[] columnLabels = new String[]{"pnr", "NBNR", "handeling","Supp","Stim1","Stim2","date","Outcome","Rank","Version"};
TableFormat<Treat> tableFormat = GlazedLists.tableFormat(Treat.class, propertyNames, columnLabels);
SortedList<Treat> TreatSortedList = new SortedList<Treat>(TreatEventList, null);
cabinaTable = new WebTable(new EventTableModel<Treat>(TreatSortedList, tableFormat));
// Configure the Table
TableComparatorChooser tableSorter = TableComparatorChooser.install(cabinaTable, TreatSortedList, TableComparatorChooser.SINGLE_COLUMN);
tableSorter.appendComparator(1, 0, true);
cabinaTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
cabinaTable.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
cabinaTable.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
int row = cabinaTable.rowAtPoint(e.getPoint());
DHDPnr = cabinaTable.getValueAt(row, 0).toString();
//at this point i set the evntlist for second Glazedlist table
summaryModel.retrieveAllPredomainWithDHDPnr(dosNr(), DHDPnr);
}
});
答案 0 :(得分:1)
当用户点击第一个表的行时,它会在第二个表中显示列表。当单击第二个表中的行时,它将替换第3个表中的其他列表
这给了我一个暗示,你可以使用基于1的索引而不是基于0的索引,在尝试访问索引为0的空ArrayList时也会导致IndexOutOfBoundsException
。
答案 1 :(得分:1)
很难说明所显示的代码,但是当你点击第一行并且它试图获取数据时代码中的某处,没有数据。因此,当您填充应该存在的数据时,由于某种原因,它不会这样做。通过查看所有代码会更容易分辨,因为我之前没有使用过GlazedLists。
大小:0表示错过了填充数据或某些内容为空。