Java 保存自定义类对象的数组
我想知道是否有一种简单的方法可以保存对象数组,而不必遍历并保存对象的各个方面。在我的示例中,我有两个数组,一个是单个数组,另一个是二维数组,其中包含引用自定义类的对象。每个对象都有特定的细节,如x和y整数、布尔值、字符串等。附加到它们(块[0].x,块[0].canWalk,块[0].name),我想知道是否有一种简单的方法可以将这些数组保存到文件中,而不必使用for循环并保存每个部分。多维数组只是与第一个数组相同的已保存数组的数组(savedBlock[0][0].x…) 到目前为止我拥有的(抛出NotSerializableException): 显然,我在Map类中更改了不同数组的某些部分,我想知道是否有更简单的方法来保存块对象数组 谢谢你花时间来帮助我,如果你需要任何更具体的,请告诉我Java 保存自定义类对象的数组,java,arrays,multidimensional-array,Java,Arrays,Multidimensional Array,我想知道是否有一种简单的方法可以保存对象数组,而不必遍历并保存对象的各个方面。在我的示例中,我有两个数组,一个是单个数组,另一个是二维数组,其中包含引用自定义类的对象。每个对象都有特定的细节,如x和y整数、布尔值、字符串等。附加到它们(块[0].x,块[0].canWalk,块[0].name),我想知道是否有一种简单的方法可以将这些数组保存到文件中,而不必使用for循环并保存每个部分。多维数组只是与第一个数组相同的已保存数组的数组(savedBlock[0][0].x…) 到目前为止我拥有的(
I.D.图像不可序列化,因此在序列化Blocks类时会收到NotSerializableException。ImageIcon可以序列化,因此在ImageIcons中包装图像实例将解决该问题
public class Blocks implements Serializable
{
public boolean canWalk, onTop, itemTaken;
public ImageIcon img = null, imgBack = null;
public final ImageIcon (a ton of different images)
public String name, item, message, title;
public char initMap, initEx, initIt;
public int x, y, height, width;
public Blocks()
{
canWalk = true;
onTop = false;
itemTaken = false;
img = null;
// img = new ImageIcon(someImageInstance)
name = null;
item = null;
message = null;
x = 0;
y = 0;
height = 0;
width = 0;
}
}
映像不可序列化,因此在序列化Blocks类时会收到NotSerializableException。ImageIcon可以序列化,因此在ImageIcons中包装图像实例将解决该问题
public class Blocks implements Serializable
{
public boolean canWalk, onTop, itemTaken;
public ImageIcon img = null, imgBack = null;
public final ImageIcon (a ton of different images)
public String name, item, message, title;
public char initMap, initEx, initIt;
public int x, y, height, width;
public Blocks()
{
canWalk = true;
onTop = false;
itemTaken = false;
img = null;
// img = new ImageIcon(someImageInstance)
name = null;
item = null;
message = null;
x = 0;
y = 0;
height = 0;
width = 0;
}
}
仅仅使一个类实现可序列化是不够的:所有字段也必须是可序列化的
您的
块
类可能有问题。所有常用的java类都是可序列化的
,但是Block
也有类型为Image
的字段。如果Image
不可Serializable
,则尝试序列化块
将引发notserializableeexception仅使类实现可序列化
是不够的:所有字段也必须是可序列化的
您的块
类可能有问题。所有常用的java类都是可序列化的
,但是Block
也有类型为Image
的字段。如果Image
不可Serializable
,那么尝试序列化Block
将抛出NotSerializableException
,它抛出相同的“NotSerializableException”,我很确定如果您有一个可序列化的类,那么该类的对象数组也是可序列化的。确保使用的是正确的Blocks对象。或者,您可以重写Blocks类中的writeObject和readObject,将字段添加到要序列化的数组中。@Vulcan您是正确的(我测试了它以确保):数组是可序列化的,只要它们的所有元素都是可序列化的。你知道Blocks类中的所有元素都是可序列化的吗?我会尝试使用ImageIcons,而不是抛出相同“NotSerializableException”的图像(不可序列化),我很确定如果你有一个可序列化的类,该类的对象数组也是可序列化的。确保使用的是正确的Blocks对象。或者,您可以重写Blocks类中的writeObject和readObject,将字段添加到要序列化的数组中。@Vulcan您是正确的(我测试了它以确保):数组是可序列化的,只要它们的所有元素都是可序列化的。你知道Blocks类中的所有元素是否都是可序列化的吗?我将尝试使用ImageIcons,而不是图像(不可序列化的)。谢谢,我将尝试将它们更改为ImageIcons(我很确定可以序列化),然后看看这会带我去哪里。谢谢,我将尝试将它们更改为ImageIcons(我非常确定它是可序列化的),然后看看这会把我带到哪里。
public class Blocks implements Serializable
{
public boolean canWalk, onTop, itemTaken;
public ImageIcon img = null, imgBack = null;
public final ImageIcon (a ton of different images)
public String name, item, message, title;
public char initMap, initEx, initIt;
public int x, y, height, width;
public Blocks()
{
canWalk = true;
onTop = false;
itemTaken = false;
img = null;
// img = new ImageIcon(someImageInstance)
name = null;
item = null;
message = null;
x = 0;
y = 0;
height = 0;
width = 0;
}
}