簡體   English   中英

帶有 java.awt.geom.Area 的 NotSerializableException

[英]NotSerializableException with java.awt.geom.Area

我正在創建一個游戲,其中“塊”的所有位置都存儲在變量block_area - 類Area的對象。 我的游戲已經正常運行了一個星期,我決定實現一個保存和加載功能,我將block_area保存到一個文件Drifter ,並將其作為我的代碼:

Area block_area; // Later initialized

void saveArea()
{
    try
    {
        FileOutputStream fos = new FileOutputStream(savefile);
        ObjectOutputStream oos = new ObjectOutputStream(fos);
        oos.writeObject(block_area);
        oos.close();
    }
    catch(Exception e)
    {
        e.printStackTrace();
    }
}

void loadArea()
{
    try
    {
        FileInputStream fis = new FileInputStream(savefile);
        ObjectInputStream ois = new ObjectInputStream(fis);
        
        block_area  = (Area)ois.readObject();
        
        ois.close();
    }
    catch(Exception e)
    {
        e.printStackTrace();
    }
}

但是,這是我第一次將 OBJECT 寫入和讀取到文件中,因此我對此知之甚少。 當我嘗試將對象保存到文件時,它給了我這個錯誤:

java.io.NotSerializableException: java.awt.geom.Area
    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1184)
    at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348)
    at Drifter.saveArea(Drifter.java:58)
    at Drifter.keyPressed(Drifter.java:315)
    ...

如果有人能告訴我如何使用文件編寫和讀取對象,將不勝感激。

TL;DR 如何將Area對象的內容寫入文件並讀取它?

有一些后續問題:

  • ObjectInputStream是這里最好的行動方案嗎? 我看到了一些人們推薦使用XMLJSON答案,但我永遠找不到時間來了解它們,並且更願意堅持使用純 Java 方法(沒有任何第三方工具)
  • 是否有任何其他方法可以將對象的信息保存到我可以使用而不是文件處理的外部源?

編輯- 我還應該提到我的班級實現了Serializable

異常是不言自明的NotSerializableException: java.awt.geom.Area 要序列化的任何對象都必須實現Serializable接口。 java,awt.geom.Area沒有。 該類的任何屬性還必須實現 Serializable,是原始的,或者被定義為瞬態的。

我建議要么找出一種將 Area 讀入實現Serializable的對象的方法。 當你讀回它時,你可以構造一個新的 Area 對象。 這大概就是評論中提到的JSON/XML 方法正在做的事情。 人類可讀存儲格式的額外好處是您可以在文本編輯器中對其進行編輯。 您將無法使用序列化對象的二進制輸出來做到這一點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM