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 :DefaultKeyboardFocusManager.java java.awt.DefaultKeyboardFocusManager.typeAheadAssertions()
526 :DefaultKeyboardFocusManager.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 :DefaultKeyboardFocusManager.java java.awt.DefaultKeyboardFocusManager$DefaultKeyboardFocusManagerSentEvent.dispatch()
188 :DefaultKeyboardFocusManager.java java.awt.DefaultKeyboardFocusManager.sendMessage()
591 :DefaultKeyboardFocusManager.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.
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?