else if (obj == delete) { //执行删除操作
Student[] arr = new Student[100];
FileReader fr;
int i = 0;
int  =100 + 1;
try {
fr = new FileReader("info.log");
BufferedReader br = new BufferedReader(fr); 
try { while(br.ready()) {
arr[i].id = br.readLine();
arr[i].name = br.readLine();
arr[i].sex = br.readLine();
arr[i].age = Integer.parseInt(br.readLine());
arr[i].subject = br.readLine();
//System.out.println("step 1");
if (arr[i].id.equals(deleteID.getText())) {
 = i;
}
i++;
}建立arr数组后,进行arr[i].id = br.readLine的操作时无法访问arr,Student也写了构造函数:public Student() {
this.id = "";
this.name = "";
this.sex = "";
this.age = 0;
this.subject = "";
}

解决方案 »

  1.   

    错误是这个Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at Manager.actionPerformed(Manager.java:451)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
    at java.awt.Component.processMouseEvent(Component.java:6267)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
    at java.awt.Component.processEvent(Component.java:6032)
    at java.awt.Container.processEvent(Container.java:2041)
    at java.awt.Component.dispatchEventImpl(Component.java:4630)
    at java.awt.Container.dispatchEventImpl(Container.java:2099)
    at java.awt.Component.dispatchEvent(Component.java:4460)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4577)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
    at java.awt.Container.dispatchEventImpl(Container.java:2085)
    at java.awt.Window.dispatchEventImpl(Window.java:2478)
    at java.awt.Component.dispatchEvent(Component.java:4460)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
      

  2.   

      Student[] arr = new Student[100];
    只是声明了,具体没有东西,下标引用为null
      

  3.   

    Student[] arr = new Student[100];只是声明了一个大小100的数组、其中每个都是null。其中每一项还需要初始化。
      

  4.   

    arr数组的100个数组元素都是引用,而且这个引用并未指向任何有效的内存,因此每个数组元素的值都是null。这意味着依然不能直接使用arr数组元素,因为每个数组元素都是null,这相当于定义了100个连续的Student变量,但这个变量还未指向任何有效的内存区,所以这100个连续的Student变量(arr数组的数组元素)还不能使用。你可以
    Student st=new Student();
    arr[0]=st;
    指向有效的内存以后就可以用arr[0]这个数组元素了。
      

  5.   

    等于只是new了个箱子,里面没有放东西。
    取的时候就是null
      

  6.   

    声明100个对象数组以后,应该对每一个对象new 一下,像for(int i=0;i<arr.length;i++){
    arr[i]=new Student();
    }这样就可以代表LZ的100个不同的对象了
      

  7.   


    要搞清楚arr里面装的是什么。你搞清楚了就知道点解会有nullpointer的异常了。arr里面装的是Student类型的变量,记住是变量,而不是对象(实例)。
    这个数组的效果类似于你定义了100个Student变量:
    Student s1;
    Student s2;

    Student s100;
    如果这时候你去访问s1~s100会么样?你没给他赋值,也就是没让他指向一个Student的对象。要想正常访问,必须指向一个new出来的Student,或者其他Student对象