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 の 1 つに直接アクセスすることになります。

それ以前は、作成された配列には null 要素のみが含まれており、配列スロットの 1 つにアクセスしようとすると、null 参照に何かを行うように要求しようとしているかのようになり、これは不可能であり、それがNullPointerException.

于 2012-06-12T00:03:38.663 に答える
1

これで、25 項目の容量remove = new JButton[25]で作成するだけですbuttons-arrayが、配列は空です。そのため、最初に新規作成する必要が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 に答える