簡體   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