Welcome to the Java Programming Forums


The professional, friendly Java community. 21,500 members and growing!


The Java Programming Forums are a community of Java programmers from all around the World. Our members have a wide range of skills and they all have one thing in common: A passion to learn and code Java. We invite beginner Java programmers right through to Java professionals to post here and share your knowledge. Become a part of the community, help others, expand your knowledge of Java and enjoy talking with like minded people. Registration is quick and best of all free. We look forward to meeting you.


>> REGISTER NOW TO START POSTING


Members have full access to the forums. Advertisements are removed for registered users.

Results 1 to 5 of 5

Thread: Error concerning Object Serialization for i/o

  1. #1
    Member
    Join Date
    Jun 2013
    Posts
    61
    Thanks
    2
    Thanked 0 Times in 0 Posts

    Default Error concerning Object Serialization for i/o

    The next code concerning Object Serialization produces, when using Netbeans, the following error (no error marking in the code itself). What is this error about?

    Exception in thread "main" java.lang.ClassFormatError: Absent Code attribute in method that is not native or abstract in class file networking/Employee
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClassCond(ClassLoader. java:631)
    at java.lang.ClassLoader.defineClass(ClassLoader.java :615)
    at java.security.SecureClassLoader.defineClass(Secure ClassLoader.java:141)
    at java.net.URLClassLoader.defineClass(URLClassLoader .java:283)
    at java.net.URLClassLoader.access$000(URLClassLoader. java:58)
    at java.net.URLClassLoader$1.run(URLClassLoader.java: 197)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.j ava:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:3 06)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launche r.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:2 47)
    at networking.ObjectRefTest.main(ObjectRefTest.java:2 5)
    Java Result: 1
    BUILD SUCCESSFUL (total time: 3 seconds)

    Here is the complete code:

    package networking;
     
    /**
     *
     * 
     */
    /**
       @version 1.10 17 Aug 1998
       @author Cay Horstmann
    */
     
     
    import java.io.*;
    import java.util.*;
     
    class ObjectRefTest
    {
       public static void main(String[] args)
       {
          Employee harry = new Employee("Harry Hacker", 50000, 1989, 10, 1);
          Manager boss = new Manager("Carl Cracker", 80000, 1987, 12, 15);
          boss.setSecretary(harry);
     
          Employee[] staff = new Employee[3];
     
          staff[0] = boss;
          staff[1] = harry;
          staff[2] = new Employee("Tony Tester", 40000, 1990, 3, 15);
     
          try
          {
             // save all employee records to the file employee.dat
             ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("employee.dat"));
             out.writeObject(staff);
             out.close();
     
             // retrieve all records into a new array
             ObjectInputStream in =  new ObjectInputStream(new FileInputStream("employee.dat"));
             Employee[] newStaff = (Employee[]) in.readObject();
             in.close();
     
             // raise secretary's salary
             newStaff[1].raiseSalary(10);
     
             // print the newly read employee records
             for (Employee e : newStaff)
                System.out.println(e);
          }
          catch (Exception e)
          {
             e.printStackTrace();
          }
       }
    }
     
    class Employee implements Serializable
    {
       public Employee() {}
     
       public Employee(String n, double s, int year, int month, int day)
       {
          name = n;
          salary = s;
          GregorianCalendar calendar = new GregorianCalendar(year, month - 1, day);
          hireDay = calendar.getTime();
       }
     
       public String getName()
       {
          return name;
       }
     
       public double getSalary()
       {
          return salary;
       }
     
       public Date getHireDay()
       {
          return hireDay;
       }
     
       public void raiseSalary(double byPercent)
       {
          double raise = salary * byPercent / 100;
          salary += raise;
       }
     
       public String toString()
       {
          return getClass().getName()
             + "[name=" + name
             + ",salary=" + salary
             + ",hireDay=" + hireDay
             + "]";
       }
     
       private String name;
       private double salary;
       private Date hireDay;
    }
     
    class Manager extends Employee
    {
       /**
          Constructs a Manager without a secretary
          @param n the employee's name
          @param s the salary
          @param year the hire year
          @param month the hire month
          @param day the hire day
       */
       public Manager(String n, double s, int year, int month, int day)
       {
          super(n, s, year, month, day);
          secretary = null;
       }
     
       /**
          Assigns a secretary to the manager.
          @param s the secretary
       */
       public void setSecretary(Employee s)
       {
          secretary = s;
       }
     
       public String toString()
       {
          return super.toString()
            + "[secretary=" + secretary
            + "]";
       }
     
       private Employee secretary;
    }


    --- Update ---

    I might have a problem with Netbeans 6.9
    Now, of a program that worked fine, I get this cryptic message:


    run:
    Exception in thread "main" java.lang.NoSuchMethodError: networking.Manager.setBonus(D)V
    at networking.ObjectFileTest.main(ObjectFileTest.java :21)
    Java Result: 1
    BUILD SUCCESSFUL (total time: 0 seconds)


  2. #2
    Super Moderator
    Join Date
    Jun 2013
    Location
    So. Maryland, USA
    Posts
    5,520
    My Mood
    Mellow
    Thanks
    215
    Thanked 698 Times in 680 Posts

    Default Re: Error concerning Object Serialization for i/o

    What is the name of the source file? Is it Employee.java? It should be ObjectRefTest.java.

    Never mind. Didn't see the update. I have no idea.

  3. #3
    Member
    Join Date
    Jun 2013
    Posts
    61
    Thanks
    2
    Thanked 0 Times in 0 Posts

    Default Re: Error concerning Object Serialization for i/o

    the class name is:
    class ObjectFileTest
    {
    public static void main(String[] args)

    The name of the file is: ObjectFileTest.java

    The above code is working and now I have an error with this one:

    package networking;
     
    /**
       @version 1.11 2004-05-11
       @author Cay Horstmann
    */
     
    import java.io.*;
    import java.util.*;
     
    class ObjectFileTest
    {
       public static void main(String[] args)
       {
          Manager boss = new Manager("Carl Cracker", 80000, 1987, 12, 15);
          boss.setBonus(5000);
     
          Employee[] staff = new Employee[3];
     
          staff[0] = boss;
          staff[1] = new Employee("Harry Hacker", 50000, 1989, 10, 1);
          staff[2] = new Employee("Tony Tester", 40000, 1990, 3, 15);
     
          try
          {
             // save all employee records to the file employee.dat
             ObjectOutputStream out = new ObjectOutputStream(new
    							FileOutputStream("employee.dat"));
             out.writeObject(staff);
             out.close();
     
             // retrieve all records into a new array
             ObjectInputStream in =  new ObjectInputStream(new
    						FileInputStream("employee.dat"));
             Employee[] newStaff = (Employee[]) in.readObject();
             in.close();
     
    	    // give an 10% raise to new object
     	    for (int i = 0; i < newStaff.length ; i++) {
                newStaff[i].raiseSalary(10);
             }
     
             // print the newly read employee records
             for (Employee e : newStaff)
                System.out.println(e);
          }
          catch (Exception e)
          {
             e.printStackTrace();
          }
       }
    }
     
    class Employee implements Serializable
    {
       public Employee() {}
     
       public Employee(String n, double s, int year, int month, int day)
       {
          name = n;
          salary = s;
          GregorianCalendar calendar =
    				new GregorianCalendar(year, month - 1, day);
          hireDay = calendar.getTime();
       }
     
       public String getName()
       {
          return name;
       }
     
       public double getSalary()
       {
          return salary;
       }
     
       public Date getHireDay()
       {
          return hireDay;
       }
     
       public void raiseSalary(double byPercent)
       {
          double raise = salary * byPercent / 100;
          salary += raise;
       }
     
       public String toString()
       {
          return getClass().getName()
             + "[name=" + name
             + ",salary=" + salary
             + ",hireDay=" + hireDay
             + "]";
       }
     
       private String name;
       private double salary;
       private Date hireDay;
    }
     
     
    class Manager extends Employee
    {
       /**
          @param n the employee's name
          @param s the salary
          @param year the hire year
          @param month the hire month
          @param day the hire day
       */
       public Manager(String n, double s, int year, int month, int day)
       {
          super(n, s, year, month, day);
          bonus = 0;
       }
     
       public double getSalary()
       {
          double baseSalary = super.getSalary();
          return baseSalary + bonus;
       }
     
       public void setBonus(double b)
       {
          bonus = b;
       }
     
       public String toString()
       {
          return super.toString()
            + "[bonus=" + bonus
            + "]";
       }
     
       private double bonus;
    }


    --- Update ---

    To be clear, when running the above code I get this error (no error mark in the code itself):

    Exception in thread "main" java.lang.NoSuchMethodError: networking.Manager.setBonus(D)V
    at networking.ObjectFileTest.main(ObjectFileTest.java :21)
    Java Result: 1
    BUILD SUCCESSFUL (total time: 0 seconds)

  4. #4
    Member
    Join Date
    Jul 2013
    Posts
    219
    Thanks
    0
    Thanked 18 Times in 17 Posts

    Default Re: Error concerning Object Serialization for i/o

    Hello.
    I executed your code on Netbeans 7.3 IDE.
    It executed without any exceptions.

    Syed.

  5. #5
    Member
    Join Date
    Jun 2013
    Posts
    61
    Thanks
    2
    Thanked 0 Times in 0 Posts

    Default Re: Error concerning Object Serialization for i/o

    weird, because the code is from the middle ages! I might have to go to 7.3
    I update or do I have to do a new installation?
    Doas 7.3 run on Mac 10.6.8?

Similar Threads

  1. [SOLVED] Object Array Serialization Encryption
    By 0w1 in forum File I/O & Other I/O Streams
    Replies: 1
    Last Post: July 14th, 2013, 05:25 PM
  2. Object Serialization how it will work?
    By ashish12169 in forum File I/O & Other I/O Streams
    Replies: 3
    Last Post: July 9th, 2013, 11:13 AM
  3. JDBC vs Serialization
    By hafunui in forum Java Theory & Questions
    Replies: 2
    Last Post: May 1st, 2012, 05:02 PM
  4. Cannot Find symbol error! On new Object
    By jtrtoday in forum What's Wrong With My Code?
    Replies: 5
    Last Post: February 15th, 2012, 01:32 PM
  5. Null or not an object error
    By James W in forum Other Programming Languages
    Replies: 4
    Last Post: November 1st, 2011, 01:06 PM