序列化圆[] []?

时间:2015-10-08 17:43:52

标签: java serialization geometry

我有一个像素编辑器应用程序,我需要保存pixelArray创建的文件。序列化Circle对象的pixelArray似乎是实用的解决方案所以我创建了以下类:

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方法,用于序列化pixelArray,如下所示:

公共类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

序列化圆[] []不应该那么难;我错过了什么,拜托?

3 个答案:

答案 0 :(得分:0)

可能您应该阅读特定例外的文档,它声明:

  

当实例需要具有Serializable接口时抛出。序列化运行时或实例的类可以抛出此异常。参数应该是类的名称。

这是因为Java serialization需要标记应该使用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()
  {
    ..
  }
};

然后序列化并反序列化。

答案 1 :(得分:0)

由于javafx.scene.shape.Circle不可序列化,因此您需要序列化实际可序列化的内容。

要实现这一点,您可以编写一个实现Serializable的包装类,该类包含在反序列化时重新创建圆形对象所需的所有数据。

这有助于制作可序列化的类:http://www.javapractices.com/topic/TopicAction.do?Id=45

答案 2 :(得分:0)

现在,我相信来自答案,放弃序列化并弄清楚如何将我的Circle [] []转换为Color [更为实用] ]。然后我需要读取/写入Color []到保存/打开的文件,并通过Wi-Fi发送到微控制器。