3

我正在尝试将文本分配给循环内的按钮,但出现 NullPointerException。我已经在类的构造函数中初始化了按钮数组,在初始化之后,我调用了以下方法。这是我遇到错误的代码。

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]);
        }
    }
}
}

按钮数组和名称数组的长度相同。此异常的原因是什么,我该如何解决?

问候

4

5 回答 5

5
 but= new JButton[4]; 

这只为四个数组元素分配空间;每个元素都被初始化null,这是像您的对象这样的引用类型的默认值。JButton

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

您应该像这样初始化它们:

but[0] = new JButton(); //or whatever.
于 2012-11-16T18:51:11.957 回答
1

您尚未初始化but数组中的元素。

如果要在循环中进行初始化,可以将其简化为:

for (int i=0;i<names.length;i++)
    pane1.add(but[i] = new JButton(names[i]));
于 2012-11-16T18:47:39.863 回答
0

这里

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

在调用方法之前初始化 but 数组

并实例化数组中的元素,因为它们都是空的 看看

   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();
    }
于 2012-11-16T18:49:05.723 回答
0

如果 but 数组的大小为 5。在执行以下操作之前,在其中添加 5 个 but 对象:

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]);
        }
于 2012-11-16T18:53:28.383 回答
0

Java 将 JButton 类型的数组初始化为 0(又名 NULL)。您需要将数组的每个索引初始化为指向 JButton 实例的指针,因为它不会为每个元素自动调用构造函数。

于 2012-11-16T19:47:07.333 回答