匿名ActionListener类异常“NullPointerException”

时间:2013-11-01 06:48:30

标签: java swing nullpointerexception actionlistener anonymous-class

在for循环中,我想要

  • 初始化JButtons [] bts
  • 将按钮添加到面板 pan3
  • 为每个JButton添加 ActionListener

这是我到目前为止所得到的:

for(int i = 0 ;i < bts1.length ; i++){
        bts1[i] = new JButton(""+i);
        pan3.add(bts1[i]);
        //The NullPointerException happens after this line . 
        bts[i].addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent ae){
                int j = 0 ;
                screen.setText(screen.getText()+bts[j].getText());
                j++;
            }
        });
    }

我的问题是如何解决NullPointerException的? 注释 对于j我添加它因为当我尝试使用i时,会发生编译错误,

5 个答案:

答案 0 :(得分:1)

您已将JButton初始化为bts1并将其称为bts。我认为这导致了错误 此外,

int i=0;声明为全局范围for(i = 0 ;i < bts1.length ; i++),然后您可以使用i代替j
或者使用如下:

for(int i = 0 ;i < bts1.length ; i++){
        bts1[i] = new JButton(""+i);
        pan3.add(bts1[i]);
        final int j=i; 
        bts1[i].addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent ae){                   
                screen.setText(screen.getText()+bts1[j].getText());
            }
        });
    }

答案 1 :(得分:1)

您正在使用两个不同的JButton阵列,btsbts1

  • 在循环中,您将创建一个JButton并将其分配给bts1[i]
  • 在ActionListener部分中,您正在访问bts[j]

您是否在某处初始化了bts[j]?如果没有,你会遇到NPE。

答案 2 :(得分:1)

尝试使用事件源

screen.setText(screen.getText()+((JButton)ae.getSource()).getText());

答案 3 :(得分:0)

try this:
for(int i = 0 ;i < bts1.length-1 ; i++){
   //rest of your code
}

由于10个元素的数组具有索引0到9的元素,而不是0到10。

答案 4 :(得分:0)

将按钮添加到面板之前。您需要先为按钮添加Listener。

首先尝试使用以下代码。

    //The NullPointerException happens after this line . 
    bts[i].addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent ae){
            int j = 0 ;
            screen.setText(screen.getText()+bts[j].getText());
            j++;
        }
    });

    **pan3.add(bts1[i]);**