xmlEncoder не пишет в netBeans - PullRequest
0 голосов
/ 20 мая 2010

Я пытаюсь использовать xmlEncoder для записи в xml-файл в сетевых компонентах, но он не работает.

Вот вызов функции записи:

dbManipulator.writeStudents(deps);

, где

deps = new Hashtable<String, Department>();
dbManipulator = new DataBaseManipulator();

Department - это объект класса, который я создал, и вот метод writeStudents, который находится в классе DataBaseManipulator:

 public void writeStudents(Hashtable<Integer, Student> students)
    {
            XMLEncoder encoder = null;
            try
            {
                encoder = new XMLEncoder(new FileOutputStream(".\\test\\Students.xml"));
            }
            catch(Exception e){}
            encoder.writeObject(students);
            encoder.close();
    }//end of function writeStudents()

Есть идеи, почему это не работает? Я попытался изменить хеш-таблицу на вектор, но после записи xml-файл выглядит так:

<?xml version="1.0" encoding="UTF-8"?> 
<java version="1.6.0_18" class="java.beans.XMLDecoder"> 
 <object class="java.util.Hashtable"/> 
</java> 

Заранее спасибо,

Грег

Ответы [ 2 ]

0 голосов
/ 20 мая 2010

Так выглядит класс ученика:

package Application;
import java.util.*;

public class AcceptedStudent extends Student{

    private String depName;
    private Hashtable<String, CourseDetails> coursesDetails; // key - courseName string, value - courseDetails object

    public AcceptedStudent(int newId, String first, String last, String newDep)
    {
        super(newId, first, last);
        depName = newDep;
        coursesDetails = new Hashtable<String, CourseDetails>();
    }

    public AcceptedStudent(int newId, String first, String last, String newDep, Hashtable<String, CourseDetails> newCourseDetails)
    {
        super(newId, first, last);
        depName = newDep;
        coursesDetails = newCourseDetails;
    }

     // Function that checks if the student took the course and got higher than 56
    public boolean checkSuccessInCourse(String courseName)
    {
        // If the student took the pre course
        if (coursesDetails.containsKey(courseName))
        {
            // If the student got grade higher than 56 in this course
            if (((CourseDetails)coursesDetails.get(courseName)).getGrade() >= 56)
            {
                return true;
            }
            return false;
        }
        return false;
    }

    public void addCourseDetails(CourseDetails cd)
    {
        coursesDetails.put(cd.getCourseName(), cd);
    }

    public Hashtable getCourseDetails()
    {
        return coursesDetails;
    }
    public String getDep()
    {
        return depName;
    }
}

и класс ученика:

package Application;

public class Student {

    private int id;
    private String fName;
    private String lName;
    private boolean status;


    public Student(int newId, String first, String last)
    {
        id = newId;
        fName = first;
        lName = last;
        status = false;
    }

    public int getId()
    {
        return id;
    }

    public String getFirstName()
    {
        return fName;
    }

    public String getLastName()
    {
        return lName;
    }

    public boolean getStatus()
    {
        return status;
    }


}
0 голосов
/ 20 мая 2010

Students соответствует спецификации Java Beans? Не забывайте, что если ваш объект имеет только данные по умолчанию, ничего не будет записано, кроме элемента, представляющего, что есть такой объект. Это потому, что кодировщик не записывает никаких данных, о которых может позаботиться конструктор по умолчанию.

Проверьте, действительно ли ваша хеш-таблица содержит объекты учеников.

...