2012-05-19 2 views
0

잠시 동안 직렬화 문제를 해결하려고 노력했지만 불행히도 저는 분실했습니다. 누군가 내가 문제를 찾을 수 있도록 도와 주시면 감사하겠습니다. 모든 클래스에 Serializable을 구현했습니다.Java NotSerializableException - AquaPainter

해결 : 문제는 하나의 클래스가 Serializable을 구현하고 AbstractTableModel을 확장한다는 것입니다. 나는 테이블 모델을위한 새로운 clas를 만들고 문제는 사라졌습니다.

IO java.io.NotSerializableException: com.apple.laf.AquaPainter$AquaSingleImagePainter 
- field (class "com.apple.laf.AquaTableHeaderBorder", name: "painter", type: "class com.apple.laf.AquaPainter") 
- object (class "com.apple.laf.AquaTableHeaderBorder", [email protected]) 
- field (class "javax.swing.JComponent", name: "border", type: "interface javax.swing.border.Border") 
- custom writeObject data (class "javax.swing.JComponent") 
- object (class "sun.swing.table.DefaultTableCellHeaderRenderer", sun.swing.table.DefaultTableCellHeaderRenderer[Table.cellRenderer,-150,-16,0x0,invalid,alignmentX=0.0,alignmentY=0.0,[email protected],flags=25165832,maximumSize=,minimumSize=,preferredSize=,defaultIcon=,disabledIcon=,horizontalAlignment=CENTER,horizontalTextPosition=TRAILING,iconTextGap=4,labelFor=,text=Cena,verticalAlignment=CENTER,verticalTextPosition=CENTER]) 
- field (class "javax.swing.table.JTableHeader", name: "defaultRenderer", type: "interface javax.swing.table.TableCellRenderer") 
- custom writeObject data (class "javax.swing.table.JTableHeader") 
- object (class "javax.swing.table.JTableHeader", javax.swing.table.JTableHeader[,0,0,450x16,invalid,alignmentX=0.0,alignmentY=0.0,border=,flags=16777544,maximumSize=,minimumSize=,preferredSize=,draggedDistance=0,reorderingAllowed=true,resizingAllowed=true,updateTableInRealTime=true]) 
- custom writeObject data (class "javax.swing.event.EventListenerList") 
- object (class "javax.swing.event.EventListenerList", EventListenerList: 2 listeners: type javax.swing.event.TableColumnModelListener listener javax.swing.JTable[,0,0,450x16,invalid,alignmentX=0.0,alignmentY=0.0,border=,flags=251674952,maximumSize=,minimumSize=,preferredSize=,autoCreateColumnsFromModel=true,autoResizeMode=AUTO_RESIZE_SUBSEQUENT_COLUMNS,cellSelectionEnabled=false,editingColumn=-1,editingRow=-1,gridColor=javax.swing.plaf.ColorUIResource[r=255,g=255,b=255],preferredViewportSize=java.awt.Dimension[width=450,height=400],rowHeight=16,rowMargin=1,rowSelectionAllowed=true,selectionBackground=com.apple.laf.AquaImageFactory$SystemColorProxy[r=49,g=102,b=202],selectionForeground=com.apple.laf.AquaImageFactory$SystemColorProxy[r=255,g=255,b=255],showHorizontalLines=true,showVerticalLines=true] type javax.swing.event.TableColumnModelListener listener javax.swing.table.JTableHeader[,0,0,450x16,invalid,alignmentX=0.0,alignmentY=0.0,border=,flags=16777544,maximumSize=,minimumSize=,preferredSize=,draggedDistance=0,reorderingAllowed=true,resizingAllowed=true,updateTableInRealTime=true]) 
- field (class "javax.swing.table.DefaultTableColumnModel", name: "listenerList", type: "class javax.swing.event.EventListenerList") 
- object (class "javax.swing.table.DefaultTableColumnModel", [email protected]) 
- field (class "javax.swing.JTable", name: "columnModel", type: "interface javax.swing.table.TableColumnModel") 
- custom writeObject data (class "javax.swing.JTable") 
- object (class "javax.swing.JTable", javax.swing.JTable[,0,0,450x16,invalid,alignmentX=0.0,alignmentY=0.0,border=,flags=251658568,maximumSize=,minimumSize=,preferredSize=,autoCreateColumnsFromModel=true,autoResizeMode=AUTO_RESIZE_SUBSEQUENT_COLUMNS,cellSelectionEnabled=false,editingColumn=-1,editingRow=-1,gridColor=javax.swing.plaf.ColorUIResource[r=255,g=255,b=255],preferredViewportSize=java.awt.Dimension[width=450,height=400],rowHeight=16,rowMargin=1,rowSelectionAllowed=true,selectionBackground=com.apple.laf.AquaImageFactory$SystemColorProxy[r=49,g=102,b=202],selectionForeground=com.apple.laf.AquaImageFactory$SystemColorProxy[r=255,g=255,b=255],showHorizontalLines=true,showVerticalLines=true]) 
- custom writeObject data (class "javax.swing.event.EventListenerList") 
- object (class "javax.swing.event.EventListenerList", EventListenerList: 1 listeners: type javax.swing.event.TableModelListener listener javax.swing.JTable[,0,0,450x16,invalid,alignmentX=0.0,alignmentY=0.0,border=,flags=251658568,maximumSize=,minimumSize=,preferredSize=,autoCreateColumnsFromModel=true,autoResizeMode=AUTO_RESIZE_SUBSEQUENT_COLUMNS,cellSelectionEnabled=false,editingColumn=-1,editingRow=-1,gridColor=javax.swing.plaf.ColorUIResource[r=255,g=255,b=255],preferredViewportSize=java.awt.Dimension[width=450,height=400],rowHeight=16,rowMargin=1,rowSelectionAllowed=true,selectionBackground=com.apple.laf.AquaImageFactory$SystemColorProxy[r=49,g=102,b=202],selectionForeground=com.apple.laf.AquaImageFactory$SystemColorProxy[r=255,g=255,b=255],showHorizontalLines=true,showVerticalLines=true]) 
- field (class "javax.swing.table.AbstractTableModel", name: "listenerList", type: "class javax.swing.event.EventListenerList") 
- object (class "zakaznik.Host", Zakaznik{nazev=rychly0, ucetDPH=27.0}) 
- custom writeObject data (class "java.util.ArrayList") 
- object (class "java.util.ArrayList", [Zakaznik{nazev=rychly0, ucetDPH=27.0}]) 
- field (class "zakaznik.Zakaznici", name: "rychly", type: "interface java.util.List") 
- root object (class "zakaznik.Zakaznici", [email protected]) 
+0

예외는 애플 클래스 ('com.apple.laf.AquaPainter $ AquaSingleImagePainter') 중 하나를 직렬화 할 수 없다는 것입니다. deserialization 할 때 다시 생성 할 수있는이 'AquaPainter' 클래스에 대한 충분한 정보 만 저장할 수있는 사용자 지정 직렬화 논리 제공 – Attila

+0

일부 클래스가 AbstractTableModel로 확장 되었기 때문입니까? –

답변

2

추적에서 zakaznik.Host는 Swing 클래스 인 AbstractTableModel 필드 참조를 볼 수 있습니다. GUI를 직렬화하는 것은 말이되지 않습니다. 가장 빠른 수정은 일시적으로 표시하는 것이지만 응용 프로그램 아키텍처를 변경해야 할 수도 있습니다.

+0

감사합니다. 당신 말이 맞습니다. AbstracTableModel로 확장 된 클래스를 직렬화 할 수 없습니다. –