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()
836efaultKeyboardFocusManager.java java.awt.DefaultKeyboardFocusManager.typeAheadAssertions()
526efaultKeyboardFocusManager.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()
161efaultKeyboardFocusManager.java java.awt.DefaultKeyboardFocusManager$DefaultKeyboardFocusManagerSentEvent.dispatch()
188efaultKeyboardFocusManager.java java.awt.DefaultKeyboardFocusManager.sendMessage()
591efaultKeyboardFocusManager.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:
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.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); } }
Thanks.




efaultKeyboardFocusManager.java java.awt.DefaultKeyboardFocusManager.typeAheadAssertions()
Reply With Quote