以下是我写的一个简单的程序,编译时没问题,运行时却抛出异常
Exception in thread "main" java.lang.NullPointerException
at home1.<init>(home1.java:16)
at home1.main(home1.java:41)
这是我的程序
import java.awt.*;
//import java.awt.event.*;
import javax.swing.*;
public class home1 extends JFrame
{private JButton buttons[],submit;
private JLabel labels[];
private JTextField fields[];
private String[] strb={"开始交易","保存记录","修改记录","停止交易"};
private String[] strl={"账号","商品","价格","现金支付"};
public home1()
{
JPanel arraybutton=new JPanel(new GridLayout(1,4));
for(int count=0;count<4;count++)
{buttons[count]=new JButton(strb[count]);
arraybutton.add(buttons[count]);
}
JPanel inputtable=new JPanel(new GridLayout(4,4));
for(int count=0;count<4;count++)
{ labels[count]=new JLabel(strl[count]);
inputtable.add(labels[count],count*4);
fields[count]=new JTextField();
inputtable.add(fields[count],count*4+1);
}
submit=new JButton("提交");
inputtable.add(submit,15);
Container container=getContentPane();
container.setLayout(new BorderLayout(5,5));
container.add(arraybutton,BorderLayout.NORTH);
container.add(inputtable,BorderLayout.CENTER);
setSize(500,500);
setVisible(true);
}
public static void main(String[] args)
{
home1 application=new home1();
application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
麻烦高手指教
------解决方案--------------------------------------------------------
数组作为一种内置对象, 默认的初始化也是NULL的, 所以你要对整个数组初始化后, 才能对里面的元素进行初始化。 里面的元素如果是基本数据类型, 那么当数组初始化后,里面的元素就自动赋初始化值了。 但是如果里面存的是对象的引用, 那么所有引用当数组初始化后, 还是为NULL, 要分别对里面的对象进行初始化。
------解决方案--------------------------------------------------------
前面多少人都没仔细看程序,空指针是指你的JButton数组没有初始化!
buttons[count]=new JButton(strb[count])//这行在使用buttons的时候,buttons仅仅是声明了,但是多少个还没有初始化,在for前面加上一句
buttons = new JButton[4]就可以了。同样,你后面的labels数组和fields数据也是没有初始化,在for循环前面也加一个labels = new JLabel[4]
以及fields = new JTextField[4]就OK了。
另外,inputtable.add方法中的int是位置的索引,你现在的所以明显是不对的,肯定要出错的,要插入的容器位置超出了你的布局管理器声明的个数