Login  Register

Serialization trouble shooting

Posted by Influenza on May 11, 2014; 6:59pm
URL: http://imagej.273.s1.nabble.com/Serialization-trouble-shooting-tp5007683.html

Hello Everyone,

I'm currently working on a Plugin that simplifies evaluation of microbiological images. Therefor I planned to develop a serializable object, such that I can save and load my results in an easy way.
I understand that I can only use fields that are serializable as well, but somehow I still receive a NotSerializableException:

java.io.NotSerializableException: sun.java2d.SunGraphics2D
        at java.io.ObjectOutputStream.writeObject0(Unknown Source)
        at java.io.ObjectOutputStream.defaultWriteFields(Unknown Source)
        at java.io.ObjectOutputStream.writeSerialData(Unknown Source)
        at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
        at java.io.ObjectOutputStream.writeObject0(Unknown Source)
        at java.io.ObjectOutputStream.writeArray(Unknown Source)
        at java.io.ObjectOutputStream.writeObject0(Unknown Source)
        at java.io.ObjectOutputStream.access$300(Unknown Source)
        at java.io.ObjectOutputStream$PutFieldImpl.writeFields(Unknown Source)
        at java.io.ObjectOutputStream.writeFields(Unknown Source)
        at java.awt.Container.writeObject(Unknown Source)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at java.io.ObjectStreamClass.invokeWriteObject(Unknown Source)
        at java.io.ObjectOutputStream.writeSerialData(Unknown Source)
        at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
        at java.io.ObjectOutputStream.writeObject0(Unknown Source)
        at java.io.ObjectOutputStream.writeObject(Unknown Source)
        at java.awt.AWTEventMulticaster.save(Unknown Source)
        at java.awt.Component.writeObject(Unknown Source)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at java.io.ObjectStreamClass.invokeWriteObject(Unknown Source)
        at java.io.ObjectOutputStream.writeSerialData(Unknown Source)
        at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
        at java.io.ObjectOutputStream.writeObject0(Unknown Source)
        at java.io.ObjectOutputStream.defaultWriteFields(Unknown Source)
        at java.io.ObjectOutputStream.writeSerialData(Unknown Source)
        at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
        at java.io.ObjectOutputStream.writeObject0(Unknown Source)
        at java.io.ObjectOutputStream.writeObject(Unknown Source)
        ...


Here is my source code:


import ...;

public class EvaSer implements Serializable{
       
        /**
         *
         */
        private static final long serialVersionUID = 3873721584911475388L;
        /**
         *
         */
        /**
         *
         */
        public int nSpec;
        public int nImages;
        public List<int[][]> types;
       
        public String evalName;
        public String[] specNames;
        public String[] typeNames;
       
        public List<String> imageNames; // For every Image one List element
        public List<Roi[][]> rois; // For every Image one Roi[nSpec][]
        public List<Roi> fixpoints; // Every Image one Fixpoint
        public List<File[]> files; // Original and Evaluated Files
       
        public Roi[] ovrls; // Control Ovrls from Flourescence as Roi[nSpec]
        public Color[] specieColors; // Chosen Colors for Species Color[nSpec]
        public File dir; // Directory of "Evaluated" ...
       
        public EvaSer(){
                this.evalName="new Evaluation "+System.currentTimeMillis();
                initLists();
                initTypeArrs();
        }
        private void initTypeArrs() {
                typeNames=new String[]{""};
               
        }
        public void initLists() {
                this.imageNames= new ArrayList<String>();
                this.rois= new ArrayList<Roi[][]>();
                this.fixpoints= new ArrayList<Roi>();
                this.files= new ArrayList<File[]>(); //files[0]= origin; files[1]= evaluated;
                this.types= new ArrayList<int[][]>();
        }
        public void save(Component parent)  {
                 System.out.println(this.nSpec);
                 System.out.println(this.nImages);
                 System.out.println(this.types.toString());
                 System.out.println(this.evalName);
                 System.out.println(this.specNames.toString());
                 System.out.println(this.typeNames.toString());
                 System.out.println(this.imageNames.toString());
                 System.out.println(this.rois.toString());
                 System.out.println(this.fixpoints.toString());
                 System.out.println(this.files.toString());
                 System.out.println(this.ovrls.toString());
                 System.out.println(this.specieColors.toString());
                 System.out.println(this.dir);
                String path;
                path=this.dir.toString();
                if(this.evalName==null){
                        this.evalName=RegularFunctions.getName(parent);
                }
                path=path+this.evalName+".eva";
               
                ObjectOutputStream oos = null;
                FileOutputStream fos = null;
                try {
                        fos = new FileOutputStream(path);
                        oos = new ObjectOutputStream(fos);

                        oos.writeObject(this);
                } catch (IOException e) {
                        e.printStackTrace();
                } finally {
                        if (oos != null)
                                try {
                                        oos.close();
                                } catch (IOException e) {
                                }
                        if (fos != null)
                                try {
                                        fos.close();
                                } catch (IOException e) {
                                }
                }



        }

       
        public EvaSer load(String path) {

                ObjectInputStream ois = null;
                FileInputStream fis = null;
                Object so= new Object();
               
                try {
                        fis = new FileInputStream(path);
                        ois = new ObjectInputStream(fis);
                        Object obj = ois.readObject();
                        if (obj instanceof EvaSer) {
                                so = (EvaSer) obj;
                        }
                } catch (IOException e) {
                        e.printStackTrace();
                } catch (ClassNotFoundException e) {
                        e.printStackTrace();
                } finally {
                        if (ois != null)
                                try {
                                        ois.close();
                                } catch (IOException e) {
                                }
                        if (fis != null)
                                try {
                                        fis.close();
                                } catch (IOException e) {
                                }
                }
                return (EvaSer) so;
        }
       
       

}


Thanks to all of you who's time I'm stealing ;)