2017-02-17 5 views
1

Я на самом деле хочу сериализовать список объектов, но я думаю, что это не делает различий. Я кладу свой класс, у которого есть только два свойства. Строка и ObservableList. Я буду включать в него методы сериализации. Я знаю, что ObservableList не реализует сериализуемое, но я заполняю TableView ими, поэтому я его использую, но если есть другой способ, я открыт для него.Как сериализовать объект, на котором есть ObservableList?

public class Tratamiento implements Serializable{ 

private String name; 
private ObservableList<Material> materials; 

public Tratamiento(String name, ObservableList<Material> materials) { 
    this.name= name; 
    this.materials= materials; 
} 

public Treatment(){   
} 

public String getName() { 
    return name; 
} 

public void setName(String name) { 
    this.name= name; 
} 

public ObservableList getMaterials() { 
    return materials; 
} 

public void setMaterials(ObservableList materials) { 
    this.materials = materials; 
} 


public int addTreatment(List tratamiento) { 
    int res = 0; //Failure 

    try { 
     FileOutputStream fileOut = new FileOutputStream("Treatment.ser"); 
     ObjectOutputStream out = new ObjectOutputStream(fileOut); 
     out.writeObject(treatment); 
     out.close(); 
     fileOut.close(); 
     System.out.printf("Object has been serialized"); 
     res = 1; 
    } catch (IOException i) { 
     i.printStackTrace(); 

    } 

    return res; 
} 



public List consultListTreatments() { 
    int res = 0; 
    //Deserialize file 
    List<Treatment> list = new ArrayList<Treatment>(); 

    try { 
     FileInputStream fileIn = new FileInputStream("Treatment.ser"); 
     ObjectInputStream in = new ObjectInputStream(fileIn); 
     list = (List) in.readObject();  
     in.close(); 
     fileIn.close(); 
     res = 1; 
    } catch (IOException i) { 
     i.printStackTrace(); 
    } catch (ClassNotFoundException c) { 
     System.out.println("Class not found"); 
     c.printStackTrace(); 
    }  
    return list; 
}  

} 

Вот реализация в моем FXML контроллер

@FXML 
private void createTreatment(ActionEvent event){ 
    Treatment tr = new Treatment();   
    List<Treatment> list = new ArrayList<Treatment>(); 
    list = tr.consultListTreatments(); 

    ObservableList<Material> rows = table.getItems();//FXCollections.observableArrayList(); 
    //get values of the rows 


    Treatament newTreatment = new Treatment(TextFieldTreatmentName.getText(),rows); 

    list.add(newTreatment); 
    newTreatment.addTreatment(list); 
    TextFieldTreatmentName.clear(); 
} 

Я видел этот вопрос, но это не соответствует моей потребности при этом я не мог изменить его на то, что я хочу. How to serialize ObservableList

+0

«На самом деле вы хотите сериализовать список объектов, но я думаю, что это не делает различий», так что конкретно вы спрашиваете здесь? –

+0

«Как сериализовать объект, на котором есть ObservableList?» Я думаю, вопрос довольно ясен. Моя реализация сериализует список объектов, в которых у объекта есть ObservableList. Вот почему я так сожалею. Должно было быть более ясно, что –

ответ

0

В этом случае вам необходимо реализовать интерфейс Externalizable. Это потребует от вас написать собственные методы для сериализации и десериализации ваших объектов.

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