The patch just changes the AIOOB to a NPE elsewhere, for example to a method
just above:
public Point getLocation() {
Rectangle r = getBounds();
return new Point(r.x, r.y);
}
Seems like the only way for the exception to happen is because removeTabAt() or
setTitleAt() is called from a different thread than the EDT.
You could avoid the setTitleAt change, by using parent.pages.indexOf(this)
although there might be a reason it is looked up by name everywhere.
It would still fail if the tab is removed from another thread, but it probably
should fail in that case since Swing is not thread safe.
You could return an zero or negative sized rectangle, but that also might lead
to problems elsewhere.
Thanks,
Walter
From: swing-dev [mailto:[email protected]] On Behalf Of Pete
Brunet
Sent: donderdag 20 augustus 2015 21:16
To: [email protected]
Subject: Re: <Swing Dev> RfR: JDK-8133897, IndexOutOfBounds exception being
thrown
Is this fix trivial enough to qualify for the noreg-trivial tag?
On 8/19/15 4:56 PM, Pete Brunet wrote:
On 8/19/15 4:50 PM, Pete Brunet wrote:
Please review this patch.
http://cr.openjdk.java.net/~ptbrunet/JDK-8133897/webrev.00/<http://cr.openjdk.java.net/%7Eptbrunet/JDK-8133897/webrev.00/>
The issue is that the application has a tab with a visible title but for some
reason JTabbedPane's title field was "". This caused indexOfTab(title) to
return -1 and then getTabBounds(parent, -1) raised
ArrayIndexOutOfBoundsException.
public Rectangle getBounds() {
- return parent.getUI().getTabBounds(parent,
- parent.indexOfTab(title));
+ int i = parent.indexOfTab(title);
+ Rectangle r;
+ // Check for no title. Even though that's a bug in the app we
should
+ // inhibit an ArrayIndexOutOfBoundsException from getTabBounds.
+ if (i == -1) {
+ r = null;
+ } else {
+ r = parent.getUI().getTabBounds(parent, i);
+ }
+ return r;
I suppose that could have been return (i == -1) ? null :
parent.getUI().getTabBounds(parent, i);
}
Maybe someone more familiar with the code can see a bug related to why title is
allowed to be "" when there is a visible title displayed in the tab. The bug I
am working was raised during use of an app for which we do not have access so
its source is not available.
Thanks, Pete