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)