2014-02-21 52 views
-1

我想在我的java程序運行時保存一些我的類。所以我可以加載它們,如果我再次啓動程序。它在3個類中的2箇中工作得很好(save()代碼除了saveURL之外在所有類中都是相同的)。但這個似乎有一些問題..更奇怪的是,save()方法在運行時第一次運行2-3次,但隨後它開始拋出錯誤。方法調用相隔5-10秒,所以應該不是問題。 我能做些什麼呢?我已經設置PageLayoutMedia爲 「實現Serializable」 ..Java Objectwriter,保存類

@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 
     } 
    } 

場景:

  • 1保存() mediaPages初始化,但是空:保存完整
  • 第二保存() mediaPages有一個元素:保存完成
  • 第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); 
    ... 
    } 
    } 
    
+0

請追加'PageLayoutMedia'的內容。 – Smutje

+0

而錯誤是?也許你應該替換「如果我們在這裏 - 我們得到了一個錯誤」,其中有一些事實上記錄了錯誤。然後將輸出粘貼到您的問題中。 – kdgregory

回答

1

假設:在第3保存,你PageLayoutMedia對象包含哪些不是Serializable值。

+0

那就是它! PageLayoutMedia是抽象的,PageLayoutPicture被存儲在LinkedList的mediaPages(已保存)和PageLayoutPicture中,這是一個對我寫的不可序列化的類的字段引用。 在這個類中增加了Serializable,現在一切正常。非常感謝! – user2078872