NotSerializableException with java.awt.geom.Area
我正在创建一个游戏,其中“块”的所有位置都存储在变量NotSerializableException with java.awt.geom.Area,java,awt,objectinputstream,objectoutputstream,Java,Awt,Objectinputstream,Objectoutputstream,我正在创建一个游戏,其中“块”的所有位置都存储在变量block\u区域——一个类区域的对象。我的游戏已经正常运行一周了,我决定实施一个保存和加载功能,将块_区域保存到文件漂移者,并将其作为我的代码: Area block_area; // Later initialized void saveArea() { try { FileOutputStream fos = new FileOutputStream(savefile); ObjectOu
block\u区域
——一个类区域的对象
。我的游戏已经正常运行一周了,我决定实施一个保存和加载功能,将块_区域
保存到文件漂移者
,并将其作为我的代码:
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)
...
如果有人能告诉我如何用一个文件来书写和阅读一个对象,我将不胜感激
TL;DR如何将区域
对象的内容写入文件并读取?
另外我还有几个后续问题:
是这里的最佳行动方案吗?我看到了一些答案,其中有人建议使用ObjectInputStream
和XML
,但我从来没有时间了解它们,我更愿意坚持使用纯Java方法(没有任何第三方工具)JSON
- 是否有其他方法可以将对象信息保存到外部源,以代替文件处理
EDIT-我还应该提到我的类实现了
Serializable
异常非常简单notserializableeexception:java.awt.geom.Area
。要序列化的任何对象都必须实现Serializable
接口<代码>java,awt.geom.Area没有。该类的任何属性也必须实现可序列化、原语或定义为瞬态
我建议要么找出一种方法,将区域读入一个实现了
Serializable
的对象。当您将其读回时,可以构造一个新的区域对象。这可能就是评论中提到的人正在做的事情。人类可读存储格式的附加好处是,您可以在文本编辑器中对其进行编辑。使用序列化对象的二进制输出,您将无法做到这一点。“人们建议使用XML。但我更喜欢使用纯Java方法。”J2SE内置了对XML读写的支持。另请参见@Andrew Thompson问题是,我对XML一无所知,虽然我通常有心情学习新东西,但这是一个简单的附带项目,我不想在“我不想在这方面投入太多时间”上投入太多时间,我可以理解这一点。“我建议找出一种方法,将区域读入一个实现可序列化的对象中。”我意识到这一点,并尝试过让一个类MA
扩展Area
并实现Serializable
,但没有用。至于可读性部分,这是不必要的,因为block_area
几乎是随机生成的,阅读它对我没有任何用处,但是,在你写这篇文章的时候,我给了+1,这可能是我的错,因为我现在懒得学习JSOn之类的新东西:)看看这个: