Well, that is just amazingly stupid. Who would have thought that removeAll() would first set the selected index to -1 (but not remove the tabs yet) and *then* call the listeners, and only *then* remove the remaining tabs? I have committed an additional check in TabbedInspector.updateDisplayedInspector(). Lemme know if you find any other errors. Sean On Feb 5, 2015, at 11:12 AM, Christian Meyer <[log in to unmask]> wrote: > Hello! > > If TabbedInspector.clear() is called JtabbedPane.removeAll() will set the selected index to -1. The change event fired thereafter will lead to an ArrayIndexOutOfBoundsException in TabbedInspector.updateDisplayedInspector() because there is no check for invalid indices and the tab count is still > 0. > > Tested with mason revision 1010 and OpenJDK version "1.7.0_75". > > Best regards, > Christian > > import sim.portrayal.Inspector; > import sim.portrayal.inspector.TabbedInspector; > > public class TestTabbedInspector { > public static void main(String[] args) { > TabbedInspector tabbedInspector = new TabbedInspector(); > > Inspector blankInspector = new Inspector() { > private static final long serialVersionUID = 1L; > > @Override > public void updateInspector() { > } > }; > > tabbedInspector.addInspector(blankInspector); > tabbedInspector.clear(); > } > }