-
Bug
-
Resolution: Duplicate
-
P4
-
None
-
5.0u9
-
x86
-
windows_xp
FULL PRODUCT VERSION :
java version "1.5.0_09"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_09-b01)
Java HotSpot(TM) Client VM (build 1.5.0_09-b01, mixed mode)
ADDITIONAL OS VERSION INFORMATION :
Microsoft Windows XP [Version 5.1.2600]
A DESCRIPTION OF THE PROBLEM :
if one of the tabs has html text in it, adding another tab with a null component generates an exception in Vector.elementAt(). Uncomment the line indicated in the test case to see this other bug.
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
Execute the testcase
ERROR MESSAGES/STACK TRACES THAT OCCUR :
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 2 >= 2
at java.util.Vector.elementAt(Vector.java:432)
at javax.swing.plaf.basic.BasicTabbedPaneUI.getTextViewForTab(BasicTabbedPaneUI.java:1483)
at javax.swing.plaf.basic.BasicTabbedPaneUI.calculateTabWidth(BasicTabbedPaneUI.java:1528)
at javax.swing.plaf.basic.BasicTabbedPaneUI.calculateMaxTabWidth(BasicTabbedPaneUI.java:1546)
at javax.swing.plaf.basic.BasicTabbedPaneUI$TabbedPaneLayout.calculateTabRects(BasicTabbedPaneUI.java:2286)
at javax.swing.plaf.basic.BasicTabbedPaneUI$TabbedPaneLayout.calculateLayoutInfo(BasicTabbedPaneUI.java:2263)
at javax.swing.plaf.basic.BasicTabbedPaneUI$TabbedPaneLayout.layoutContainer(BasicTabbedPaneUI.java:2178)
at java.awt.Container.layout(Container.java:1401)
at java.awt.Container.doLayout(Container.java:1390)
at java.awt.Container.validateTree(Container.java:1473)
at java.awt.Container.validateTree(Container.java:1480)
at java.awt.Container.validateTree(Container.java:1480)
at java.awt.Container.validate(Container.java:1448)
at javax.swing.RepaintManager.validateInvalidComponents(RepaintManager.java:379)
at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(SystemEventQueueUtilities.java:113)
---------- BEGIN SOURCE ----------
import java.awt.*;
import javax.swing.*;
import static java.awt.RenderingHints.*;
import java.awt.event.KeyEvent;
import java.awt.geom.GeneralPath;
public class BugReport {
public static void main(String[] args) throws Exception {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
final JTabbedPane tabs = new JTabbedPane();
tabs.setTabPlacement(JTabbedPane.LEFT);
// Another (bonus) bug - if one of the tabs has html text in it
// adding a tab with a null component will then generate an NPE
// in Vector.elementAt(), uncomment the line below to see this
tabs.addTab("<HTML><FONT size = 10>TAB</FONT></HTML>",new JPanel());
tabs.addTab(null, new TabIcon(), new JPanel());
JFrame frame = new JFrame("Bug Report");
frame.setContentPane(tabs);
frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);
frame.setBounds(100,100,200,600);
frame.setVisible(true);
Thread.sleep(1000);
final Robot robot = new Robot();
final Rectangle d = new Rectangle();
final Point p = new Point();
Runnable runner = new Runnable(){
public void run(){
try {
for (int i=0; i<7; i++){
Thread.sleep(1000);
SwingUtilities.invokeLater(new Runnable(){
public void run(){
int tab = tabs.getTabCount()-1;
d.setBounds(tabs.getBoundsAt(tab));
p.setLocation(d.x+d.width/2,d.y+d.height/2);
SwingUtilities.convertPointToScreen(p,tabs);
robot.mouseMove(p.x,p.y+d.height);
tabs.addTab(null, new TabIcon(), null);
}
});
}
} catch (Exception ex) {}
}
};
runner.run();
}
static final class TabIcon implements Icon {
final int W = 60;
public TabIcon() {
}
public int getIconHeight() {
return W;
}
public int getIconWidth() {
return W;
}
public void paintIcon(Component c, Graphics g, int x, int y) {
Graphics2D g2 = (Graphics2D)g.create();
Color iconColor = Color.BLUE;
g2.setRenderingHint(KEY_ANTIALIASING, VALUE_ANTIALIAS_ON);
g2.setRenderingHint(KEY_RENDERING, VALUE_RENDER_QUALITY);
g2.setColor(Color.BLUE);
g2.fillOval(x, y, W, W);
g2.setColor(Color.RED);
GeneralPath path = new GeneralPath();
path.moveTo(x+W/2,y+W/2);
for (int i=0; i<10000; i++){
path.lineTo(x+W/4+(float)Math.random()*W/2, y+W/4+(float)Math.random()*W/2);
}
g2.draw(path);
g2.dispose();
}
}
}
---------- END SOURCE ----------
REPRODUCIBILITY :
This bug can be reproduced always.
*** (#1 of 1): 2006-11-20 13:12:18 GMT+05:30 ###@###.###
java version "1.5.0_09"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_09-b01)
Java HotSpot(TM) Client VM (build 1.5.0_09-b01, mixed mode)
ADDITIONAL OS VERSION INFORMATION :
Microsoft Windows XP [Version 5.1.2600]
A DESCRIPTION OF THE PROBLEM :
if one of the tabs has html text in it, adding another tab with a null component generates an exception in Vector.elementAt(). Uncomment the line indicated in the test case to see this other bug.
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
Execute the testcase
ERROR MESSAGES/STACK TRACES THAT OCCUR :
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 2 >= 2
at java.util.Vector.elementAt(Vector.java:432)
at javax.swing.plaf.basic.BasicTabbedPaneUI.getTextViewForTab(BasicTabbedPaneUI.java:1483)
at javax.swing.plaf.basic.BasicTabbedPaneUI.calculateTabWidth(BasicTabbedPaneUI.java:1528)
at javax.swing.plaf.basic.BasicTabbedPaneUI.calculateMaxTabWidth(BasicTabbedPaneUI.java:1546)
at javax.swing.plaf.basic.BasicTabbedPaneUI$TabbedPaneLayout.calculateTabRects(BasicTabbedPaneUI.java:2286)
at javax.swing.plaf.basic.BasicTabbedPaneUI$TabbedPaneLayout.calculateLayoutInfo(BasicTabbedPaneUI.java:2263)
at javax.swing.plaf.basic.BasicTabbedPaneUI$TabbedPaneLayout.layoutContainer(BasicTabbedPaneUI.java:2178)
at java.awt.Container.layout(Container.java:1401)
at java.awt.Container.doLayout(Container.java:1390)
at java.awt.Container.validateTree(Container.java:1473)
at java.awt.Container.validateTree(Container.java:1480)
at java.awt.Container.validateTree(Container.java:1480)
at java.awt.Container.validate(Container.java:1448)
at javax.swing.RepaintManager.validateInvalidComponents(RepaintManager.java:379)
at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(SystemEventQueueUtilities.java:113)
---------- BEGIN SOURCE ----------
import java.awt.*;
import javax.swing.*;
import static java.awt.RenderingHints.*;
import java.awt.event.KeyEvent;
import java.awt.geom.GeneralPath;
public class BugReport {
public static void main(String[] args) throws Exception {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
final JTabbedPane tabs = new JTabbedPane();
tabs.setTabPlacement(JTabbedPane.LEFT);
// Another (bonus) bug - if one of the tabs has html text in it
// adding a tab with a null component will then generate an NPE
// in Vector.elementAt(), uncomment the line below to see this
tabs.addTab("<HTML><FONT size = 10>TAB</FONT></HTML>",new JPanel());
tabs.addTab(null, new TabIcon(), new JPanel());
JFrame frame = new JFrame("Bug Report");
frame.setContentPane(tabs);
frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);
frame.setBounds(100,100,200,600);
frame.setVisible(true);
Thread.sleep(1000);
final Robot robot = new Robot();
final Rectangle d = new Rectangle();
final Point p = new Point();
Runnable runner = new Runnable(){
public void run(){
try {
for (int i=0; i<7; i++){
Thread.sleep(1000);
SwingUtilities.invokeLater(new Runnable(){
public void run(){
int tab = tabs.getTabCount()-1;
d.setBounds(tabs.getBoundsAt(tab));
p.setLocation(d.x+d.width/2,d.y+d.height/2);
SwingUtilities.convertPointToScreen(p,tabs);
robot.mouseMove(p.x,p.y+d.height);
tabs.addTab(null, new TabIcon(), null);
}
});
}
} catch (Exception ex) {}
}
};
runner.run();
}
static final class TabIcon implements Icon {
final int W = 60;
public TabIcon() {
}
public int getIconHeight() {
return W;
}
public int getIconWidth() {
return W;
}
public void paintIcon(Component c, Graphics g, int x, int y) {
Graphics2D g2 = (Graphics2D)g.create();
Color iconColor = Color.BLUE;
g2.setRenderingHint(KEY_ANTIALIASING, VALUE_ANTIALIAS_ON);
g2.setRenderingHint(KEY_RENDERING, VALUE_RENDER_QUALITY);
g2.setColor(Color.BLUE);
g2.fillOval(x, y, W, W);
g2.setColor(Color.RED);
GeneralPath path = new GeneralPath();
path.moveTo(x+W/2,y+W/2);
for (int i=0; i<10000; i++){
path.lineTo(x+W/4+(float)Math.random()*W/2, y+W/4+(float)Math.random()*W/2);
}
g2.draw(path);
g2.dispose();
}
}
}
---------- END SOURCE ----------
REPRODUCIBILITY :
This bug can be reproduced always.
*** (#1 of 1): 2006-11-20 13:12:18 GMT+05:30 ###@###.###
- duplicates
-
JDK-6495408 REGRESSION: JTabbedPane throws ArrayIndexOutOfBoundsException
-
- Closed
-