日期:2014-05-20  浏览次数:20981 次

我的程序中Exception in thread "main" java.lang.NullPointerException怎么解决
以下是我写的一个简单的程序,编译时没问题,运行时却抛出异常
 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是位置的索引,你现在的所以明显是不对的,肯定要出错的,要插入的容器位置超出了你的布局管理器声明的个数