我有一个像素编辑器应用程序,我需要保存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
序列化圆[] []不应该那么难;我错过了什么,拜托?
答案 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发送到微控制器。