找不到nullPointerException的来源

时间:2011-02-08 20:18:04

标签: java user-interface

我正在尝试制作一个简单的GUI,但遇到了一些错误。我想创建3个简单的按钮,让它们并排显示,屏幕的长度。我该怎么做呢?

到目前为止我的代码是:

  public static void main(String[] args) {
    JFrame frame = new JFrame ("JFrame");
    JPanel panel = new JPanel( );
    frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE);
    JButton buttons[] = new JButton[2];
    for(int i = 0;i<=buttons.length ; i++){
     panel.add(buttons[i]);
    }
    frame.getContentPane( ).add( panel );
    frame.setSize( 500, 500);
    frame.setVisible( true );
  }

3 个答案:

答案 0 :(得分:4)

嗯,如果我记得的话,Java中的对象数组是用空引用初始化的。因此,在您的for中,您将向面板添加null。

你必须这样做:

JButton buttons[] = new JButton[2];
for(int i = 0;i < buttons.length ; i++){
    buttons[i] = new JButton(/* whatever */);
    panel.add(buttons[i]);
}

然后再次提出一个问题:如果您可以在创建按钮时添加它们,为什么要使用按钮数组?

答案 1 :(得分:2)

您需要先初始化阵列中的按钮。您可以像以下示例中那样执行此操作。

JButton buttons[] = new JButton[2];
for(int i = 0; i < buttons.length; i++){
    buttons[i] = new JButton("" + i);
}
for(int i = 0; i < buttons.length; i++){
    panel.add(buttons[i]);
}

问题是所有按钮最初都初始化为null。并且组件不允许您向其添加null

答案 2 :(得分:2)

在将按钮添加到面板之前,您需要先初始化按钮。

for(int i = 0;i<buttons.length ; i++){
    buttons[i] = new JButton();
    panel.add(buttons[i]);
}

另外,请注意我对for循环i < buttons.length而不是i <= buttons.length所做的修改

这是使用各种JButtons(here)的一个很好的小例子。它还包括将ImageIcons添加到按钮。即一个错误按钮。

URL imgURL = JButtonDemo.class.getResource("Error.jpg");
ImageIcon icon = new createImageIcon(imgURL ); // should check that imgURL is not null
buttons[0] = new JButton("Error!",icon);

这使它们比默认JButton

更有用