java - "java.lang.ArrayIndexOutOfBoundsException: -1",同时将制表符添加到 "javax.swing.JTabbedPane"

标签 java swing jtabbedpane indexoutofboundsexception

请帮助解决java.lang.ArrayIndexOutOfBoundsException

我非常随机地得到这个异常,最糟糕的是我无法重现异常。 Stack-Trace 显示 addTab() 抛出了该异常。

这是代码 -

public class ClosableTabbedPane extends JTabbedPane{

    public void addTab(String title, Component component) {
            super.addTab(title+"       ", component);
        }


    public String getTabTitleAt(int index) {
        return super.getTitleAt(index).trim();
    }

    public void removeTab(int index){
            this.removeTabAt(index);
        }

这是堆栈跟踪-

21 May 2013 09:38:11,992  ERROR eError : java.lang.ArrayIndexOutOfBoundsException: -1
       at java.util.ArrayList.elementData(ArrayList.java:371)
       at java.util.ArrayList.get(ArrayList.java:384)
       at javax.swing.JTabbedPane.getTitleAt(JTabbedPane.java:1112)

at javax.swing.plaf.basic.BasicTabbedPaneUI$Handler.updateHtmlViews(BasicTabbedPaneUI.java:3578)
       at javax.swing.plaf.basic.BasicTabbedPaneUI$Handler.componentAdded(BasicTabbedPaneUI.java:3713)
   at java.awt.Container.processContainerEvent(Container.java:2255)
       at java.awt.Container.processEvent(Container.java:2226)
       at java.awt.Component.dispatchEventImpl(Component.java:4861)

 at java.awt.Container.dispatchEventImpl(Container.java:2287)
       at java.awt.Component.dispatchEvent(Component.java:4687)
       at java.awt.Container.addImpl(Container.java:1131)
       at javax.swing.JTabbedPane.insertTab(JTabbedPane.java:724)

   at javax.swing.JTabbedPane.addTab(JTabbedPane.java:798)
       at net.abc.f.c.b.addTab(Unknown Source)
       at net.abc.f.a.c.a(Unknown Source)
       at com.xyz.b.b.f.<init>(Unknown Source)
       at com.xyz.b.b.f.<init>(Unknown Source)
       at com.xyz.main.c.w.a(Unknown Source)
        at com.xyz.main.c.o.run(Unknown Source)
       at java.lang.Thread.run(Thread.java:722)
-1 Error: java.lang.ArrayIndexOutOfBoundsException: -1

最佳答案

因为您以某种方式传递索引 -1 来从 ArrayList 获取元素,而索引 -1 是无效索引。 ArrayList 中的索引基于 0,如果没有元素存储,get(index) 将抛出 IndexOutOfBoundException传递的索引。

在调用 ArrayListget(index) 方法之前,您需要检查是否有有效索引。比如,

public String getTitleAt(index) {
  if(index >=0 && index<list.size()) {  
     list.get(index);
  }
  return null; //fallback
}

关于java - "java.lang.ArrayIndexOutOfBoundsException: -1",同时将制表符添加到 "javax.swing.JTabbedPane",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16662868/

相关文章:

java - SimpleJdbcRespository 如何以及在哪里实例化了我的存储库接口(interface)?

java - 在 JAVA 中创建动态类而不使用反射 API?

java - 没有调用函数就绘制图?

java - 用 Java 模仿 Office 2007 的缩放栏(修改后的 JSlider)

java - 与多个容器共享组件

java - 由于 java.lang.RuntimeException : android. os.TransactionTooLargeException 导致库崩溃:数据包大小 539544 字节

Java 编码——继承问题

java - 动态创建 JPanel

java - IntelliJ IDEA 中的自定义 View 类

java - JTabbedPane 如何拥有多行选项卡,而每个选项卡面板底部没有额外的间距/填充?