2016-03-08 65 views
-1

这个问题已经面临了很多时间,我知道,我遇到了这些问题,但couldnt了解我的问题。这是下面给出我的代码的一部分,“AWT-EventQueue-0”java.lang.IndexOutOfBoundsException,(需要向arrayList添加null),二维ArrayList

public ArrayList<Slice> network_slices; 
public ArrayList<ArrayList<String>> nfs_slices= new ArrayList<ArrayList<String>>(); 
public int index; 

private class TabSelect implements ChangeListener { 
     @Override 
     public void stateChanged(ChangeEvent e) { 
      JTabbedPane source = (JTabbedPane) e.getSource(); 
      if (source.getSelectedComponent() != null) { 
       index = source.getSelectedIndex(); 
      } 
     } 
    } 

private int count = 0; 
    private class AddNetworkFuncitons implements ActionListener { 
     @Override 
     public void actionPerformed(ActionEvent e) { 

      String buttonselected = (String) e.getActionCommand(); 
      JButton button = new JButton(buttonselected); 
      network_slices.get(index).add(button).setVisible(true); 
      int c =nf_list.indexOf(buttonselected); 
      System.out.println(index); 
      System.out.println(c); 

      nfs_slices.get(index).set(c,nf_list.get(c)); 
      System.out.println(nfs_slices); 
//   System.out.println(nfs_slices.get(index)); 
      count ++; 
     } 
    } 

每当被执行的操作,它应该增加buttonselected字符串对应index列表中的ArrayList(因为有2维的ArrayList)。索引由changeListener随时更改。

其中nf_list是一个包含4个元素的String的ArrayList。 但它引发异常。 我在构造函数中初始化了network_slicesnetwork_slices = new ArrayList<Slice>();

+0

在哪里声明了'nf_list',并且在哪里初始化了'network_slices'?发布完整的代码和异常跟踪。 – saurav

+0

我在问题中编辑。 – nothingSpecial

+0

您正在将索引存储在状态中。当您将network_slices设置为新的ArrayList时,其新大小为零。所以,如果没有任何元素,任何调用get(index)都会失败。你需要添加一个检查来确保你的network_slices ArrayList不是空的。 – ManoDestra

回答

0

你不能保证network_slices的确在被访问的索引中包含一个对象,因此你有一个空指针异常。

至少检查,这不是它做任何操作之前空...

+0

network_slices不是空的,它现在有4个JPanel,我在下面给出, [network.slicing.Slice [,0,0,0x0,invalid,hidden,layout = java.awt.FlowLayout,alignmentX = 0.0,alignmentY = 0.0,border =,flags = 9,maximumSize =,minimumSize =,preferredSize = java.awt.Dimension [width = 550,height = 600]]] [network.slicing.Slice [,2,25550 x634,....], [network.slicing.Slice [,0,0,0x0,...]]] 等, – nothingSpecial

+0

但是您确实有一个空指针异常...调试并检查索引值和实时数组内容... –

+0

nfs_slices或network_slices的索引值? network_slices是一个空数组列表,而nfs_slices是二维数组列表。 – nothingSpecial

0

我已经加入空列表的二维数组,每个一行。我添加它的构造函数,以便在使用它之前,它不会是空的,我可以调用get(指数),

for (int i=0; i<10; i++){ 
     nfs_slices.add(new ArrayList<String>()); 
     for(int j=0; j<nf_number; j++) 
      nfs_slices.get(i).add(null); 
    } 

现在,它可以调用get(指数),并把该元素在特定的地方。 谢谢你们帮助我。