I have build 3 Glazedlist table. when the user clicked on the row of the first table it shows list in the second table. when click on row in second table it displaies other list in the 3th table. Problem is when i click the first row in first table sometimes following exception appears.
Does any body know Why do i get IndexOutOfBoundsException and how get rid of it?
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)
Code:
// 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);
}
});
when the user clicked on the row of the first table it shows list in the second table. when click on row in second table it displaies other list in the 3th table
This gives me a hint that you could be using 1-based indexing instead of 0-based indexing, also leading to IndexOutOfBoundsException
when trying to access an empty ArrayList with index 0.