2012-06-12 61 views
0

这里是我的代码...为什么我得到一个NullPointerException错误?

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?

+0

因为你实际上并没有*有*任何按钮。 –

回答

4

在你行:

remove = new JButton[25]; 

你要创建一个拥有25个插槽JButton的对象的数组。你现在必须创建你想放入数组的每个JButton。

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

之后,当您试图访问数组元素,你会直接访问先前创建的Jbutton将之一。

在此之前,您创建的数组仅包含空元素,并且当您尝试访问某个数组插槽时,就好像您试图要求空引用执行某些操作一样,这是不可能的,这就是为什么您会得到一个NullPointerException

+0

OHOHOHOHOH kkkk我明白了!!! THANKSSSS! – b321234

+0

所以这导致下一个问题...我已经设置它可见,但我仍然看不到任何按钮:((是否有任何错误wif我的代码:S再次感谢! – b321234

+0

@ user1447864在您的for循环,调用't.add(remove [i])'。 – purtip31

1

与此remove = new JButton[25]你刚刚创建了buttons-array与25项容量,但你的数组是空的。所以你必须先创建新的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); 
} 
+0

YEA我现在明白了,谢谢! – b321234

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); 
    } 
+0

YEAAAA现在我得到它的答复感谢您的答复;) – b321234

相关问题