昨天在做一個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 { } } }
