Java 序列化圆[][]?
我有一个像素编辑器应用程序,我需要将创建的像素阵列保存到一个文件中。序列化圆形对象的像素阵列似乎是一个实用的解决方案,因此我创建了以下类:Java 序列化圆[][]?,java,serialization,geometry,Java,Serialization,Geometry,我有一个像素编辑器应用程序,我需要将创建的像素阵列保存到一个文件中。序列化圆形对象的像素阵列似乎是一个实用的解决方案,因此我创建了以下类: public class PixelArray implements Serializable{ static Circle[][] pixelArray; public static Circle[][] pixArray (int row, int col){ pixelArray = new Circle[row][c
public class PixelArray implements Serializable{
static Circle[][] pixelArray;
public static Circle[][] pixArray (int row, int col){
pixelArray = new Circle[row][col];
return pixelArray;
}
}
SaveFile类包括一个JFileChooser和SaveFile方法,用于按如下方式序列化像素阵列:
公共类存储文件{
public static void write(){
String fileName;
fileName = "PixelArray1.pix";
JFileChooser fileDialog = new JFileChooser( "C:\\Program Files (x86)\\Visual Art\\Playlist\\");
File selectedFile = new File(fileName);
fileDialog.setSelectedFile(selectedFile);
fileDialog.setDialogTitle("Save Pixel File");
fileDialog.setSelectedFile(null);
fileDialog.setSize(400, 400);
fileDialog.setVisible(true);
int option = fileDialog.showSaveDialog(null);
if(option != JFileChooser.APPROVE_OPTION)
return; //user canceled of clicked the dialog's close box
selectedFile = fileDialog.getSelectedFile();
if(selectedFile.exists()){ //ask the user to replace this file
int response = JOptionPane.showConfirmDialog(null,"The file \""+ selectedFile.getName() +
"\" already exists.\nDo you want to replace it?",
"Confirm Save",
JOptionPane.YES_NO_OPTION,
JOptionPane.WARNING_MESSAGE );
if(response != JOptionPane.YES_OPTION) return; //user does not want ot replace the fle
}
saveFile(pixelArray, "PixelArray1.pix"); //Serialize
}
public static void saveFile(Circle[][] pixelArray, String fileName){ //Serialize
try {
FileOutputStream fos = new FileOutputStream(fileName);
ObjectOutputStream out = new ObjectOutputStream(fos);
out.writeObject(pixelArray);
out.flush();
out.close();
}
catch (IOException e){
System.out.println(e);
}
}
作为一名新手,我可能会尝试一下,但我无法克服这个例外:
java.io.NotSerializableException:javafx.scene.shape.Circle
序列化一个圆[][]应该没那么难;请问我遗漏了什么?也许您应该阅读特定异常的文档,它指出: 当实例需要具有可序列化接口时引发。序列化运行时或实例的类可以引发此异常。参数应为类的名称 这是因为需要标记应该可以使用serializable接口序列化的类:
class Circle implements Serializable
{
...
}
如果您正在使用的类不可修改,则必须提供自己的桥接类,例如:
class SerializableCircle implements Serializable
{
// create a serializable circle from a Circle
SerializableCircle(Circle circle) {
..
}
// create a Circle back from an unserialized circle
Circle unserialize()
{
..
}
};
然后序列化并取消序列化。因为javafx.scene.shape.Circle不可序列化,所以需要序列化实际可序列化的内容
要实现这一点,您可以编写一个包装器类,该类实现Serializable,在反序列化圆对象时,它拥有重新创建圆对象所需的所有数据
下面是一些有助于创建可序列化类的内容:现在,我相信从给出的答案来看,放弃序列化并找出如何将我的圆圈[]转换为颜色[]。然后我需要读/写颜色[]一个文件保存/打开并通过Wi-Fi发送到微控制器。节点形状圆:这些不实现可序列化。检查或考虑序列化一个可以创建圆圈的结构。您可能需要扩展圆类以使其实现可序列化,并且在PixelSoad类图形对象中使用该类倾向于B。e相当重。我认为像素不需要比颜色和坐标对更多的数据。@AlbertoSaito现在这会给这个子类带来沉重的责任负担。。。