2012-05-13 3 views
1

У меня есть четыре класса. Класс проекта, класс учеников, класс ProjectFile и ProjectFrame JFrame.Значение не сохраняется в массиве?

ProjectFrame предназначен только для графического интерфейса, и я не коснулся этого.

Студенты и класс проекта являются конструкторами, и я их закодировал.

Теперь я пытаюсь реализовать класс ProjectFile, читая из текстового файла, а затем сохраняя данные для чтения. У меня возникают проблемы, так как я не уверен, почему экземпляр класса Project не хранит данные. Я посмотрел на свои петли, и я напечатал переменные, чтобы убедиться, что цикл на самом деле происходит. Он работает в первый раз, но когда я пытаюсь вызвать второй массив, он дает мне исключение NullPointerException. Поэтому я предполагаю, что он сохраняет значение как null, но это не должно быть так.

Это мой ProjectFile Класс

/* 
* To change this template, choose Tools | Templates 
* and open the template in the editor. 
*/ 
package DecelAssignment; 

import java.io.*; 

/** 
* 
* @author Zane 
*/ 
public class ProjectFile { 

    private static Project[] pJect; 
    private static Student[] sDent; 
    private static Project ja; 
    private static BufferedReader br; 

    public static void readData() { 
     File inputFile = new File("projects.txt"); 

     try { 
      br = new BufferedReader(new FileReader(inputFile)); 
      String s = br.readLine(); 
      pJect = null; 
      pJect = new Project[Integer.parseInt(s)]; 
      //System.out.println(s); 
      for (int i = 0; i < pJect.length; i++) { 
       s = br.readLine(); 
       if (s == null) { 
        break; 
       } else { 
        String sLine[] = s.split(","); 
        int count = 3; 
//     for (int i2 = 0; i2 < Integer.parseInt(sLine[3]); i2++) { 
//      sDent[i2] = new Student(sLine[count+1], sLine[count+2], sLine[count+3], sLine[count+4]); 
//      count += 4; 
//     } 
        pJect[i] = new Project(sLine[0], sLine[1], sLine[2], sDent); 
        System.out.println(pJect[1].getTitle()); 
        System.out.println(sLine[0]); 
        System.out.println(i); 
       } 
      } 

     } catch (IOException e) { 

      System.out.println("I caught an IO Exception1"); 
     } 
//  } catch (NullPointerException e) { 
//   e.printStackTrace(); 
//   System.out.println("I caught a Null Pointer Exception!"); 
// 
//  } 
    } 

// public Project[] getProjectInfo() { 
//   
//   
//  return; 
// } 
    public static void main(String[] args) {  
     readData(); 
    } 
} 

Это текстовый файл, я читаю из

3 
iPhone App,EEE,John Tan,1,P109520,Kelvin Tay,DBIT,M 
iPad App,DMIT,Mark Goh,3,P106286,Felicia Wong,DIT,F,P101803,Rachel Chang,DIT,F,P100036,Lewis Poh,DBIT,M 
Green Living,DMIT,Audrey Lim,2,P1,Peter Chua,DIT,M,P103287,Ng Ming Shu,DISM,F 

Может кто-то пожалуйста, объясните мне, где я кодирования это неправильно? Я не могу понять.

EDIT:

Это проект класса

/* 
* To change this template, choose Tools | Templates 
* and open the template in the editor. 
*/ 
package DecelAssignment; 

/** 
* 
* @author Zane 
*/ 
public class Project { 
    private String title, school, supervisor; 
    private Student[] stDent; 

    public Project() { 
     title = ""; 
     school = ""; 
     supervisor = ""; 
     stDent = new Student[0]; 
    } 

    public Student[] getStDent() { 
     return stDent; 
    } 

    public Project(String title, String school, String supervisor, Student[] stDent) { 
     this.title = title; 
     this.school = school; 
     this.supervisor = supervisor; 
     this.stDent = stDent; 
    } 

    public String getSchool() { 
     return school; 
    } 

    public void setSchool(String school) { 
     this.school = school; 
    } 

    public String getSupervisor() { 
     return supervisor; 
    } 

    public void setSupervisor(String supervisor) { 
     this.supervisor = supervisor; 
    } 

    public String getTitle() { 
     return title; 
    } 

    public void setTitle(String title) { 
     this.title = title; 
    } 

} 
+3

Не улавливайте нулевые указатели. Нет смысла делать это – keyser

+0

Что такое конструктор класса Project? Вы действительно присваиваете значения переменным-членам? –

+0

Я знаю. Но я должен это сделать, потому что это требование для этого задания. – Zane

ответ

4

Я думаю, что ваш код врезается здесь

 System.out.println(pJect[1].getTitle()); 

В первом pJect петли [1] будет содержать нуль, который вызывает авария

Возможно, вы намерены

 System.out.println(pJect[i].getTitle()); 
+0

Да, да. Но мне интересно, почему? EDIT: OH. Я понял. Argh. Stupid me – Zane

+0

Вы пытались сделать getTitle для 'null' –

Смежные вопросы