繁体   English   中英

匿名ActionListener类异常“ NullPointerException”

[英]Anonymous ActionListener Class Exception “NullPointerException”

在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时会发生编译器错误,

您将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());
            }
        });
    }

您正在使用两个不同的bts1数组btsbts1

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

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

尝试使用事件源

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

因为10个元素的数组的元素索引为0到9,而不是0到10。

在您将按钮添加到面板之前。 首先需要为按钮添加监听器。

首先尝试以下代码。

    //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]);**

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM