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现在这会给这个子类带来沉重的责任负担。。。