带有java.awt.geom.Area的NotSerializableException

时间:2019-03-01 06:33:17

标签: java awt objectinputstream objectoutputstream

我正在创建一个游戏,其中“块”的所有位置都存储在变量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(); } } 中,并以此作为代码:

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)
    ...

但是,这是我第一次对文件写入和读取对象,所以我对此并不了解。当我尝试将对象保存到文件时,它给了我这个错误:

Area

如果任何人都可以告诉我如何去读写带有文件的对象,那么将不胜感激。

TL; DR如何将ObjectInputStream对象的内容写入文件并读取它?

,我有几个后续问题:

  • XML是这里最好的做法吗?我看到了一些建议人们使用JSONSerializable的答案,但是我永远找不到时间来学习它们,并且我会选择使用纯Java方法(没有任何第三方)工具)
  • 还有其他方法可以将对象的信息保存到我可以用来代替文件处理的外部源吗?

编辑-我还应该提到我的课程实现了<html> <body> <script> document.write("Hello World!"); </script> </body> </html>

1 个答案:

答案 0 :(得分:2)

例外是很容易解释的NotSerializableException: java.awt.geom.Area。您要序列化的任何对象都必须实现Serializable接口。 java,awt.geom.Area没有。该类的任何属性还必须实现Serializable,可以是原始的,也可以定义为瞬时的。

我建议要么想办法将Area读入确实实现Serializable的对象中。读回时,可以构造一个新的Area对象。评论中提到的JSON/XML method可能正在这样做。可读的存储格式的另一个好处是您可以在文本编辑器中对其进行编辑。您将无法使用序列化对象的二进制输出来做到这一点。