Subject: | |
From: | |
Reply To: | |
Date: | Thu, 5 Feb 2015 13:28:40 -0500 |
Content-Type: | text/plain |
Parts/Attachments: |
|
|
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();
> }
> }
|
|
|