簡體   English   中英

JButton的NullPointerException

[英]NullPointerException for JButton

我試圖將文本分配給循環內的按鈕,但我得到一個NullPointerException。 我已經在類的構造函數中初始化了按鈕數組,在initilizatoin之后,我調用了以下方法。 這是我收到錯誤的代碼。

public class Alfred
{
   private String names[]={"nfs","gta","maxpayne","hitman"};
   private JButton but[];

   public Alfred()
   {
    ...
     but= new JButton[4];
    AssignLettersToButtons();
   }
    private void AssignLettersToButtons()
    {       
        for(int i=0;i<names.length;i++)
        {
            but[i].setText(names[i]); // error
            pane1.add(but[i]);
        }
    }
}
}

按鈕數組和名稱數組的長度相同。 這個例外的原因是什么,我該如何解決?

問候

 but= new JButton[4]; 

這只為四個數組元素分配空間 ; 每個元素都初始化null ,這是JButton對象之類的引用類型的默認值

but[0]but[1]but[2]but[3]都是null

你應該像這樣初始化它們:

but[0] = new JButton(); //or whatever.

你沒有初始化but數組中的元素。

如果要在循環中進行初始化,可以將其簡化為:

for (int i=0;i<names.length;i++)
    pane1.add(but[i] = new JButton(names[i]));

這里

  but[i].setText(names[i]); //but[i] is null here

在調用方法之前初始化but數組

並實例化數組中的元素,因為它們都是null只是看

   for(int i=0;i<names.length;i++)
    {
        System.out.println(but[i]);//all will print null
    }

嘗試這樣的代碼來實例化元素

   for(int i=0;i<names.length;i++)
    {
       but[i]= new Jbutton();
    }

如果but數組的大小是5.在執行以下操作之前,在其中添加5個對象:

but[i].setText(names[i]);

我認為你的數組還沒有用對象進行初始化,這就是為什么當你使用setText()它給你NPE。

嘗試以下內容:

for(int i=0;i<names.length;i++)
        {
            JButton butObject = new JButton();//Add this line to your code
            but[i]=butObject;         // Add this line to your code
            but[i].setText(names[i]); // error
            pane1.add(but[i]);
        }

Java將JButton類型的數組初始化為0(又稱NULL)。 您需要將數組的每個索引初始化為指向JButton實例的指針,因為它不會為每個元素自動調用構造函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM