0

这是我的代码...

 import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JOptionPane;
    import javax.swing.JPanel;

public class test extends JFrame {
    public test() {     
        setSize(1000,600);
    }

    private static JButton[] remove;
    private static JPanel p = new JPanel();

    public static void main(String[]args){
        JFrame t = new test();
        remove = new JButton[25];
        for (int i = 0; i < 25; i++) { 
            remove[i].setBounds(243, 92 + 30 * i, 85, 20);
        }
    t.setVisible(true);
    }

} 

我创建了一个包含 25 个按钮的数组,但为什么它仍然抛出这个错误:S?

4

3 回答 3

4

在您的行中:

remove = new JButton[25];

您正在为 JButton 对象创建一个包含 25 个插槽的数组。您现在必须创建要放入数组的每个 JButton。

for(int i= 0; i < 25; i++) {
   remove[i] = new JButton();
}

之后,当您尝试访问数组元素时,您将直接访问您之前创建的 JButton 之一。

在此之前,您创建的数组仅包含 null 元素,当您尝试访问其中一个数组插槽时,就好像您试图要求 null 引用做某事,这是不可能的,这就是您得到NullPointerException.

于 2012-06-12T00:03:38.663 回答
1

有了这个remove = new JButton[25],您只需创建buttons-array25 个项目的容量,但您的数组是空的。所以你必须先创建新的Button,然后你可以setBounds(243, 92 + 30 * i, 85, 20)为每个设置。

remove = new JButton[25];
for(int i=0;i<25;i++){
   remove[i] = new JButton();
   remove[i].setBounds(243,92+30*i,85,20);
}
于 2012-06-12T00:03:09.480 回答
0

所有未初始化为指向堆上对象的引用都设置为 null。

试试这个:

    // Ever heard of "magic numbers"?  These are very bad, indeed.
    // Your snippet is loaded with them.
    remove = new JButton[25];
    for(int i=0;i<25;i++){
        remove[i] = new JButton();
        remove[i].setBounds(243,92+30*i,85,20);
    }
于 2012-06-12T00:05:28.380 回答