0

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

4

5 回答 5

1

您初始化JButtonbts1并将其称为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());
            }
        });
    }
于 2013-11-01T07:07:29.600 回答
1

您正在使用两个不同的 JButton 数组,bts并且bts1.

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

您是否也在bts[j]某个地方进行了初始化?如果没有,您将遇到 NPE。

于 2013-11-01T07:07:43.867 回答
1

尝试使用事件源

screen.setText(screen.getText()+((JButton)ae.getSource()).getText());
于 2013-11-01T07:07:48.537 回答
0
try this:
for(int i = 0 ;i < bts1.length-1 ; i++){
   //rest of your code
}

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

于 2013-11-01T06:54:37.003 回答
0

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

先试试下面的代码。

    //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]);**
于 2013-11-01T06:54:43.410 回答