Java 如何创建JPanel的向量?

Java 如何创建JPanel的向量?,java,arrays,swing,nullpointerexception,jpanel,Java,Arrays,Swing,Nullpointerexception,Jpanel,我试图向面板添加一个在下面的类中定义的子面板数组,但得到了java.lang.ArrayIndexOutOfBoundsException: public class PlayerPanel extends JPanel{ public JPanel[] playerPanelArray; public PlayerPanel(int nrOfPlayers){ playerPanelArray = new JPanel[nrOfPlayers];

我试图向面板添加一个在下面的类中定义的子面板数组,但得到了
java.lang.ArrayIndexOutOfBoundsException

public class PlayerPanel extends JPanel{
    public JPanel[] playerPanelArray;

    public PlayerPanel(int nrOfPlayers){    
        playerPanelArray = new JPanel[nrOfPlayers];

        for(int i = 0; i < nrOfPlayers; i++) {
            playerPanelArray[i] = new JPanel();
            playerPanelArray[i].add(new JButton("See if working"));
            add(playerPanelArray[i]);
        }
    }
}
以及:


如果我删除第一个,它会给我一个
java.lang.NullPointerException

您的第一条语句告诉编译器分配一个包含JPanel的
nrOfPlayers
数组。但是没有一个元素被分配,它们都包含
null


第二条语句用一个新的JPanel初始化每个元素,并将它们的引用放在之前分配的位置。如果不首先分配数组,则现在将放置引用IH。

如果要使用向量,则需要使用以下内容:

Vector<JPanel> panels = new Vector<JPanel>(); 
panels.add(new JPanel());
向量面板=新向量(); panels.add(新的JPanel()); 它当前失败,因为没有分配任何元素,它们当前包含null

playerPanelArray=newjpanel[nrOfPlayers]
正在初始化数组,并且
playerPanelArray[i]=new JPanel()正在该特定索引处实例化对象,该索引当前为空

我会使用ArrayList,我知道你在标题中说过如何使用vector,但除非这是多线程的,否则我认为ArrayList会很好

我不明白为什么我必须初始化
playerPanelArray
两次

这只是初始化了数组。数组中的任何非基元类型都必须单独初始化。如果不初始化这些数组元素,它们将
null
,这将最终导致NPE

playerPanelArray[i] = new JPanel();
这将在位置
i
处初始化元素。当然,你把它放在一个循环中,这样你就初始化了所有的元素


您为
PlayerPanel
发布的代码运行良好。我建议您将其与当前应用程序中的代码进行比较,然后发布导致错误的部分。

在哪一行出现错误?回答第二个问题,
playerPanelArray=new JPanel[nrofpayers]
只是初始化数组,而
playerPanelArray[i]=new JPanel()正在初始化数组中的每个元素。你可以把数组想象成一个容器——你只需要创建一个足够大的盒子来放入
nrOfPlayers
元素,但是这些元素在你调用
new JPanel()
之前是不存在的,这就是你在循环中所做的。
Vector<JPanel> panels = new Vector<JPanel>(); 
panels.add(new JPanel());
playerPanelArray = new JPanel[nrOfPlayers];
playerPanelArray[i] = new JPanel();