昨天在做一个java项目的时候,发现下面代码中红色字体那行总是报NotSerializableException,查错误,MyRectangle这个类也明明实现了Serializable接口。
花了大半天,原来发现虽然MyRectangle虽然实现了Serializable接口,但MyRectangle在我的项目中是以内部类的形式定义的,
而内部类不能被序列化!
对于内部类来说,静态的内部类才可以被序列化,在MyRectangle类定义前加个static,问题就解决了。
以后还是提醒自己,尽量少用内部类,限制太多,以免造成不必要的麻烦。
还是先去查一下内部类和静态内部类的特点联系以及区别吧。
class MySaveListener implements ActionListener { public void actionPerformed(ActionEvent e) { if(saveFileName==null) { jfc=new JFileChooser("d:/"); jfc.showSaveDialog(null); sf=jfc.getSelectedFile(); saveFileName=sf.getAbsolutePath(); try { ObjectOutputStream output=new ObjectOutputStream(new FileOutputStream(saveFileName)); Iterator e10=vrectangles.iterator(); while(e10.hasNext()) { MyRectangle rectangle1=(MyRectangle)e10.next(); output.writeObject(rectangle1); } output.close(); } catch (FileNotFoundException e1) { e1.printStackTrace(); } catch (IOException e1) { e1.printStackTrace(); } } else { } } }