数组索引超出范围异常错误

时间:2015-04-08 19:45:00

标签: java jframe awt jlabel jtextfield

我尝试创建一个窗口,但我收到以下错误 线程“main”中的异常java.lang.ArrayIndexOutOfBoundsException:6     在CreateProject.Window.main(Window.java:20)     在这里输入代码

public static void main(String[] args) {
    JFrame frame = new JFrame("gtrged");
  JLabel[] labels=new JLabel[6];

  for (int i=0;i<10;i++)
  {
        labels[i]=new JLabel("Column" + i);
    }

  JTextField[] txt = new JTextField[3];
  JPanel panel = new JPanel(new GridBagLayout());
    GridBagConstraints cst = new GridBagConstraints();
    JScrollBar vbar=new JScrollBar(JScrollBar.VERTICAL, 30, 40, 0, 500);
    int f=0;

    for(int i =0 ; i<6 ;i++)
    {
         cst.fill = GridBagConstraints.HORIZONTAL;
         cst.gridx = 0;
         cst.gridy = f;//
         cst.gridwidth = 2;
            panel.add(labels[i],cst);
      for(int j=0 ; j<3 ; j++)
          {       f=f+1;
                 int ks=0;
            cst.fill = GridBagConstraints.HORIZONTAL;
            cst.gridx = 0;
            cst.gridy = f;//
            cst.gridwidth = 2;
                panel.add(txt[ks],cst);
             ks++;
      }
      f=f+1;

    }

    frame.getContentPane().add(vbar, BorderLayout.EAST);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(1300,700);
    frame.getContentPane().add(panel);
    frame.setVisible(true);
}

4 个答案:

答案 0 :(得分:1)

在这段代码中,您尝试设置10个标签,但只创建一个大小为6的数组,因此无法创建额外的标签。

  for (int i=0;i<10;i++)
  {
        labels[i]=new JLabel("Column" + i);
    }

仔细查看错误消息,它会告诉您到底出了什么问题,以及在哪一行 - 学习正确读取这些内容将为您节省数小时的麻烦。

答案 1 :(得分:1)

这是您的代码

 for (int i=0;i<10;i++)
{
    labels[i]=new JLabel("Column" + i);
}

你经历了10次。您的数组仅被声明为六个

JLabel[] labels=new JLabel[6];

答案 2 :(得分:0)

for (int i=0;i<10;i++)

您必须将其更改为

 for(int i = 0; i < 6; i++)

或者您必须更改数组

JLabel[] labels=new JLabel[10];

问题是:它尝试访问空内存位置 以下链接可能有所帮助。

http://examples.javacodegeeks.com/java-basics/exceptions/java-lang-arrayindexoutofboundsexception-how-to-handle-array-index-out-of-bounds-exception/

答案 3 :(得分:0)

数组labels的大小为6,但是你尝试从0迭代到9,所以当你labels[6]抛出异常时。

JLabel[] labels=new JLabel[6];
for (int i=0;i<10;i++) {
    labels[i]=new JLabel("Column" + i); // this will throw an exception when i == 6
}

尽可能尝试使用数组长度:

for (int i = 0; i < labels.length; i++) {
    labels[i] = new JLabel("Column" + i);
}

这有助于防止可能的ArrayIndexOutOfBoundsException