Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-6495411

JTabbedPane throws Exception at java.util.Vector.elementAt

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Duplicate
    • Icon: P4 P4
    • None
    • 5.0u9
    • client-libs

      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 ###@###.###

            alexp Alexander Potochkin (Inactive)
            ndcosta Nelson Dcosta (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

              Created:
              Updated:
              Resolved:
              Imported:
              Indexed: