0

I am creating a Hotel Reservation System in java and I'm having a problem with saving and loading information. I have a class called Global which stores all the arrays:

import java.io.*;
import java.util.*;

public class Global implements Serializable {
    public static ArrayList<Guests> guests = new ArrayList<Guests>();
    public static ArrayList<Reservations> reservations = new ArrayList<Reservations>();
    public static ArrayList<Rooms> rooms = new ArrayList<Rooms>();
}   

I also have a class called ToSave:

import java.io.*;
import java.util.*;

public class ToSave implements Serializable {
    public ArrayList<Guests> getGuests() {
        return Global.guests;
    }

    public void setGuests(ArrayList<Guests> guests) {
        Global.guests = guests;
    }

    public ArrayList<Reservations> getReservations() {
        return Global.reservations;
    }

    public void setReservations(ArrayList<Reservations> reservations) {
        Global.reservations = reservations;
    }

    public ArrayList<Rooms> getRooms() {
        return Global.rooms;
    }

    public void setRooms(ArrayList<Rooms> rooms) {
        Global.rooms = rooms;
    }

    public void save(String filename) {
        try {
            FileOutputStream fileOut = new FileOutputStream(filename);
            ObjectOutputStream out = new ObjectOutputStream(fileOut);
            out.writeObject(this);
            out.close();
            fileOut.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void load(String filename) {
        try {
            FileInputStream fileIn = new FileInputStream(filename);
            ObjectInputStream in = new ObjectInputStream(fileIn);
            ToSave save = (ToSave)in.readObject();
            this.setGuests(save.getGuests());
            this.setReservations(save.getReservations());
            this.setRooms(save.getRooms());
            in.close();
            fileIn.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }      
} 

Then finally I have a class called uiMethods that stores the save and load buttons:

if(clicker == save) {
    ToSave save = new ToSave();
    save.setGuests(Global.guests);
    save.setReservations(Global.reservations);
    save.setRooms(Global.rooms);
    save.save(filename);
}

if(clicker == load) {
   ToSave save = new ToSave();
   save.load(filename);
   Global.guests = save.getGuests();
   Global.reservations = save.getReservations();
   Global.rooms = save.getRooms();
}  

FYI This is what the Guests class consists of:

public class Guests implements Serializable {
    Integer id;
    String name, surname, email, mobile, passport;

    public Guests() {
    }

    public Guests(int id, String name, String surname, String mobile, String email, String passport) {
        this.id = id;
        this.name = name;
        this.surname = surname;
        this.mobile = mobile;
        this.email = email;
        this.passport = passport;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSurname() {
        return surname;
    }

    public void setSurname(String surname) {
        this.surname = surname;
    }

    public String getMobileNo() {
        return mobile;
    }

    public void setMobileNo(String mobile) {
        this.mobile = mobile;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getPassportNo() {
        return passport;
    }

    public void setPassportNo(String passport) {
        this.passport = passport;
    }

    public boolean equals(int guestId) {
        if (id == guestId) {
            return true;
        } else {
            return false;
        }        
    } 

    public Guests searchGuestById(int searchId) {
        for (int i = 0; i < Global.guests.size(); i++) {
            if (Global.guests.get(i).id == searchId) {
                return Global.guests.get(i);
            }
        }

        return null;
    }

    public void editGuest(Guests guestFound, uiMethods ui) {
        ui.guestId.setText(Integer.toString(Global.guests.indexOf(guestFound))); 
        ui.name.setText(guestFound.name);
        ui.surname.setText(guestFound.surname);
        ui.mobileNo.setText(guestFound.mobile);
        ui.email.setText(guestFound.email);
        ui.passportNo.setText(guestFound.passport);
    }

    public void deleteGuest(Guests guestFound) {
        Global.guests.remove(Global.guests.indexOf(guestFound));        
    }

    private boolean validation(uiMethods ui) {
        if (ui.name.getText().trim().length() == 0) {
            JOptionPane.showMessageDialog(ui, "Name cannot be empty", "Error", JOptionPane.ERROR_MESSAGE);
            return false;
        }

        if (ui.surname.getText().trim().length() == 0) {
            JOptionPane.showMessageDialog(ui, "Surname cannot be empty", "Error", JOptionPane.ERROR_MESSAGE);
            return false;
        }

        if (ui.mobileNo.getText().trim().length() == 0) {
            JOptionPane.showMessageDialog(ui, "Mobile number cannot be empty", "Error", JOptionPane.ERROR_MESSAGE);
            return false;
        }

        if (ui.email.getText().trim().length() == 0) {
            JOptionPane.showMessageDialog(ui, "Email cannot be empty", "Error", JOptionPane.ERROR_MESSAGE);
            return false;
        }

        if (ui.passportNo.getText().trim().length() == 0) {
            JOptionPane.showMessageDialog(ui, "Passport number cannot be empty", "Error", JOptionPane.ERROR_MESSAGE);
            return false;
        }

        return true;
    }

    public boolean detailsForm(uiMethods ui) {      
        if(this.validation(ui)) {
            Guests guest = new Guests();

            guest.id = Integer.parseInt(ui.guestId.getText());
            guest.name = ui.name.getText();
            guest.surname = ui.surname.getText();
            guest.mobile = ui.mobileNo.getText();
            guest.email = ui.email.getText();
            guest.passport = ui.passportNo.getText();

            Global.guests.add(guest.id, guest);

            return true;
        }

        return false;
    }
}

When I'm loading the program it's giving me the following error: java.io.notserializableexception

Any ideas how to solve this problem? Your help is greatly appreciated.

3
  • your entities like global and rooms are all implements serializeable interface? Commented Jan 23, 2014 at 14:08
  • Are Reservations and Rooms serializable? Commented Jan 23, 2014 at 14:08
  • Isn't it the Global variables you're trying the serialize? Also this is terribly anti-pattern to have a global context such at this one. This really isn't how OOP is supposed to work. Commented Jan 23, 2014 at 14:09

3 Answers 3

1

Some of the classes Guests, Rooms, Reservations is not Serializable. Or it contains a reference to an object which is not Serializable. You need to fix that and the error will be gone.

http://docs.oracle.com/javase/7/docs/api/java/io/Serializable.html

Sign up to request clarification or add additional context in comments.

Comments

0

NotSerializableException means that system is not able to serialize a specific object state.

  1. Ensure all the AGGREGATED objects in the complete serialization process are Serializable.
  2. Read the complete log and trace the name of object.

Comments

0

The java.io.notserializableexception means that the Object what you want to save is not Serializable.

You want to save an ArrayList of Objects, so some of these Objects are not Serializable

You should check that: Rooms, Reservations, Guests are Serializable If not, they must implement the Serializable interface.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.