CodeGuru Home VC++ / MFC / C++ .NET / C# Visual Basic VB Forums Developer.com
Results 1 to 2 of 2
  1. #1
    Join Date
    Dec 1999
    Location
    North Sydney, NS
    Posts
    445

    problem with JTabbedPane throwing exception

    I have a JTabbedPane in a window with 2 tabs. If I close the last tab and the app loses focus, an exception is thrown:

    Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 1 (1)
    1313 :BasicTabbedPaneUI.java javax.swing.plaf.basic.BasicTabbedPaneUI.getTabBounds()
    1248 :BasicTabbedPaneUI.java javax.swing.plaf.basic.BasicTabbedPaneUI.getTabBounds()
    3258 :BasicTabbedPaneUI.java javax.swing.plaf.basic.BasicTabbedPaneUI$Handler.focusLost()
    5380 :Component.java java.awt.Component.processFocusEvent()
    5244 :Component.java java.awt.Component.processEvent()
    1966 :Container.java java.awt.Container.processEvent()
    3955 :Component.java java.awt.Component.dispatchEventImpl()
    2024 :Container.java java.awt.Container.dispatchEventImpl()
    3803 :Component.java java.awt.Component.dispatchEvent()
    1810 :KeyboardFocusManager.java java.awt.KeyboardFocusManager.redispatchEvent()
    836 efaultKeyboardFocusManager.java java.awt.DefaultKeyboardFocusManager.typeAheadAssertions()
    526 efaultKeyboardFocusManager.java java.awt.DefaultKeyboardFocusManager.dispatchEvent()
    3841 :Component.java java.awt.Component.dispatchEventImpl()
    2024 :Container.java java.awt.Container.dispatchEventImpl()
    3803 :Component.java java.awt.Component.dispatchEvent()
    463 :EventQueue.java java.awt.EventQueue.dispatchEvent()
    50 :SentEvent.java java.awt.SentEvent.dispatch()
    161 efaultKeyboardFocusManager.java java.awt.DefaultKeyboardFocusManager$DefaultKeyboardFocusManagerSentEvent.dispatch()
    188 efaultKeyboardFocusManager.java java.awt.DefaultKeyboardFocusManager.sendMessage()
    591 efaultKeyboardFocusManager.java java.awt.DefaultKeyboardFocusManager.dispatchEvent()
    3841 :Component.java java.awt.Component.dispatchEventImpl()
    2024 :Container.java java.awt.Container.dispatchEventImpl()
    1766 :Window.java java.awt.Window.dispatchEventImpl()
    3803 :Component.java java.awt.Component.dispatchEvent()
    463 :EventQueue.java java.awt.EventQueue.dispatchEvent()
    93 :SequencedEvent.java java.awt.SequencedEvent.dispatch()
    461 :EventQueue.java java.awt.EventQueue.dispatchEvent()
    234 :EventDispatchThread.java java.awt.EventDispatchThread.pumpOneEventForHierarchy()
    163 :EventDispatchThread.java java.awt.EventDispatchThread.pumpEventsForHierarchy()
    157 :EventDispatchThread.java java.awt.EventDispatchThread.pumpEvents()
    149 :EventDispatchThread.java java.awt.EventDispatchThread.pumpEvents()
    110 :EventDispatchThread.java java.awt.EventDispatchThread.run()


    It's a simple little app:

    Code:
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.plaf.basic.BasicTabbedPaneUI;
    
    public class TabTest extends JFrame 
    {
    	
    	public class MouseEventHandler implements MouseListener {
    		TabsPane pane = null;
    		public MouseEventHandler(TabsPane pane)
    		{
    			this.pane = pane;
    		}
    	
    		public void mouseClicked(MouseEvent m0)
    		{
    			if(m0.getButton() == m0.BUTTON1){
    			}else if(m0.getButton() == m0.BUTTON2){
    			}else if(m0.getButton() == m0.BUTTON3){
    				System.out.println("mouse click");
    				try{
    					pane.remove(pane.getSelectedComponent());
    				}catch(java.lang.Exception a){
    					System.err.println(a);
    				}
    			}
    		}
    	
    		public void mouseEntered(MouseEvent m0)
    		{
    		}
    	
    		public void mouseExited(MouseEvent m0)
    		{
    		}
    	
    		public void mousePressed(MouseEvent m0)
    		{
    		}
    	
    		public void mouseReleased(MouseEvent m0)
    		{
    		}
    	}
    	
    	
    	public class TabsPane extends JTabbedPane{
    		
    		public TabsPane()
    		{
    			addMouseListener(new MouseEventHandler(this));
    		}
    	}
    	
    	
    	public TabTest()
    	{
    		initializeMethod();
    	}
    
    	private void initializeMethod()
    	{
    		Container container=getContentPane();
    		container.setLayout(new BorderLayout());
    		TabsPane pane = new TabsPane();
    		add(pane);
    		
    		pane.add(new TextArea("hello 1"));
    		pane.add(new TextArea("hello 2"));
    		
    		addWindowListener(new WindowAdapter()
    		{
    			public void windowClosing(WindowEvent e)
    			{
    				dispose();
    				System.exit(0);
    			}
    		});
    	}
    	
    	
    
    	public static void main(String[] sCommand)
    	{
    		TabTest app=new TabTest();
    		app.setBounds(133,100,532,400);
    		app.setTitle("TabTest");
    		app.setVisible(true);
    	}
    
    }
    The exception doesn't seem to have negative consequences. The app continues to run like nothing happened. I'd still like to know how to fix this.

    Thanks.
    I know how to build. What to build is a completely different story.

  2. #2
    Join Date
    May 2006
    Location
    UK
    Posts
    4,473

    Re: problem with JTabbedPane throwing exception

    I've run your code and I can't get an exception to be generated. I've tried all combinations (I think) of closing order and gaining/losing focus and still no exception. Is there a very specific operating sequence to get the exception?

    I've compiled it using jikes and javac and run it using java build 1.5.0.06-b05, what version are you running?

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  





Click Here to Expand Forum to Full Width

Featured