Java Objectwriter,保存类

时间:2014-02-21 18:24:51

标签: java save filewriter

我想在我的java程序运行时保存一些类。所以如果我再次启动程序,我可以加载它们。它适用于3个类中的2个(除了saveURL之外,save()代码在所有类中都是相同的)。但是这个似乎有一些问题..奇怪的是,save()方法在运行时前2-3次工作,但随后它开始抛出错误..方法调用相隔5-10s,所以不应该是问题。 我该怎么办?我已经将PageLayoutMedia设置为“implements Serializable”..

@SuppressWarnings("serial")
public class DataManager implements Serializable{

private LinkedList<PageLayoutMedia> mediaPages = new LinkedList<PageLayoutMedia>();

public Datamanager(...){ ... }

    private void privateSave(){
    try{
        //delete old save file
        MyFileWriter.deleteFile(saveURL);
        // Open a file to write to
        FileOutputStream saveFile=new FileOutputStream(saveURL);
        // Create an ObjectOutputStream to put objects into save file.
        ObjectOutputStream save = new ObjectOutputStream(saveFile);

        // Now we do the save.
        save.writeObject(mediaPages);

        // Close the file.
        save.close(); // This also closes saveFile.         
    }
        catch(Exception e){
        // if we land here - we got an error
        }
    }

情形:

  • 第一次保存() mediaPages已初始化但为空:保存完整
  • 第二次保存() mediaPages有一个元素:save complete
  • 3次保存() mediaPages有两个元素:抛出错误:(

    @SuppressWarnings("serial")
    public abstract class PageLayout implements Serializable{
    
    private long ID;
    private String URL;
    protected static String backgroundColor;
    protected static Dimension dim;
    protected static String mediaURL;
    
    public PageLayout(Long ID, String URL) {    
        ...
    }   
    }
    
    
    @SuppressWarnings("serial")
    public abstract class PageLayoutMedia extends PageLayout{
    private AnzeigeZeitraum zeitraum;
    protected Dimension mediaDim;
    protected String mediaURL;
    protected int borderTop;
    
    public PageLayoutMedia(Long ID, String URL, AnzeigeZeitraum zeitraum, Dimension mediaDim, String mediaURL) {
    super(ID, URL);
    ...
    }
    }
    
    @SuppressWarnings("serial")
    public class PageLayoutFullpicture extends PageLayoutMedia {
    
    public PageLayoutFullpicture(AnzeigeZeitraum zeitraum, Dimension mediaDim, String mediaURL, Long ID, String URL) {
    super(ID, URL, zeitraum, mediaDim, mediaURL);
    ...
    }
    }
    

1 个答案:

答案 0 :(得分:1)

假设:在第3次保存时,您的PageLayoutMedia个对象包含的值不是Serializable