Java-JTabbedPane-arrayindexoutofbounds添加新面板时的异常

Java-JTabbedPane-arrayindexoutofbounds添加新面板时的异常,java,swing,jtabbedpane,Java,Swing,Jtabbedpane,使用JTabbedPane并向其添加新选项卡时,我遇到了一个奇怪的问题 public void addTab(String title, AbstractTab tab) { int i = tabPanel.getTabCount(); System.out.println("Tab count:" + i); tab.validate(); tabPanel.insertTab(title, null, tab, title, i); tabPanel

使用
JTabbedPane
并向其添加新选项卡时,我遇到了一个奇怪的问题

public void addTab(String title, AbstractTab tab) {
    int i = tabPanel.getTabCount();
    System.out.println("Tab count:" + i);
    tab.validate();
    tabPanel.insertTab(title, null, tab, title, i);
    tabPanel.validate();
    tabPanel.setSelectedIndex(i);
}
运行此代码会导致以下异常:

Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: -1
at java.util.Vector.elementAt(Unknown Source)
at javax.swing.JTabbedPane.getTitleAt(Unknown Source)
at javax.swing.plaf.basic.BasicTabbedPaneUI$Handler.updateHtmlViews(Unknown Source)
at javax.swing.plaf.basic.BasicTabbedPaneUI$Handler.componentAdded(Unknown Source)
at java.awt.Container.processContainerEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.Container.addImpl(Unknown Source)
at javax.swing.JTabbedPane.insertTab(Unknown Source)
at View.Swing.Global.**EditorPanel.addTab(EditorPanel.java:383)**
at View.Swing.Developer.DeveloperContentPanel.showNote(DeveloperContentPanel.java:176)
at View.Swing.Developer.DeveloperTreeViewer.clickedTreeElement(DeveloperTreeViewer.java:62)
at View.Swing.Global.TreeNavigation.mouseClicked(TreeNavigation.java:556)
at java.awt.AWTEventMulticaster.mouseClicked(Unknown Source)
...
System.out.println(…)打印

Tab count 1 
奇怪的是,这个方法只工作一次,另一次抛出这个异常。添加的选项卡是类
AbstractTab
的实例,包含
JTextFields
、一个
MetaphaseEditor
、滚动条、
JLabels
JTextArea
以及一些图片(
ImageIcon

有人知道这个问题的解决方案吗?

从中,您可能不止一次使用一个组件

在文档中说明JTabbedPane中没有两个选项卡可以具有 分配给它们的组件相同。。原因 java.lang.ArrayIndexOutOfBoundsException:1>0


您可能没有足够的信息让我们给出答案。考虑创建和发布一个小的可编译和可运行的程序,我们可以在需要外部资源的情况下运行,并演示您的问题。另外,我认为你要找的词是“怪异的”。为什么不使用
addTab()
setSelectedComponent()
?那么你就不需要关心索引了。好主意是+1:-)不过这样做时,实际的堆栈跟踪与上面显示的有点不同(JTabbedPane.checkIndex中的IndexOOB)