2011-12-13 89 views
0

我有几个JButton,我试图在for循环中添加它们的动作侦听器,但它给出了空指针异常,但是如果我逐一添加它们,则不会出现问题。我想知道我的错误是什么。谢谢。在循环中添加按钮处理程序

JButton[ ] myButtonArray = { but1, but2, but3 }; 
ButtonHandler bh = new ButtonHandler(); 

for (JButton cur : myButtonArray) { // I tried standard for loop as well. 
    cur.addActionListener(bh); 
} 
+0

请发布包含异常的堆栈跟踪。 – 2011-12-13 19:44:35

+0

你可以显示`ButtonHandler`的代码吗?它是什么扩展? – Jonas 2011-12-13 19:45:29

+0

当我编写如下代码时,ButtonHandler没有问题:but1.addActionListener(bh); – NotCamelCase 2011-12-13 19:47:15

回答

5

工作对我来说完全没有问题..尝试这个演示

enter image description here

package sof; 

import java.awt.GridLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.JButton; 
import javax.swing.JFrame; 

public class CustomLayoutFrame{ 
    public static void main(String args[]) { 
     JFrame frame = new JFrame("Custom Layout Frame"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     frame.setLayout(new GridLayout(3,1)); 

     JButton but1 = new JButton("Button1"); 
     JButton but2 = new JButton("Button2"); 
     JButton but3 = new JButton("Button3"); 

     JButton[ ] myButtonArray = { but1, but2, but3 }; 
     ButtonHandler bh = new ButtonHandler(); 

     for (JButton cur : myButtonArray) { // I tried standard for loop as well. 
      cur.addActionListener(bh); 
     } 

     frame.add(but1); 
     frame.add(but2); 
     frame.add(but3); 

     frame.setSize(300, 150); 
     frame.setVisible(true); 
     } 
} 

class ButtonHandler implements ActionListener{ 
    @Override 
    public void actionPerformed(ActionEvent arg0) { 
     System.out.println(((JButton)(arg0.getSource())).getText() + " Clicked !"); 

    } 
} 
1

而且你什么初始化but1but2but3?因为这是您的nullpointerexception最可能的来源。

1

我猜你的按钮中的至少一个为空 - 即but1,but2,或but3(或全部)未初始化。 Wh