我正在用java创建一个酒店预订系统,我在保存和加载信息方面遇到了问题。我有一个名为Global的类,它存储所有数组:
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>();
}
我还有一个名为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();
}
}
}
然后最后我有一个名为uiMethods的类,它存储了保存和加载按钮:
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这是Guests类包含的内容:
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;
}
}
当我加载程序时,它给出了以下错误:java.io.notserializableexception
任何想法如何解决这个问题?非常感谢您的帮助。
答案 0 :(得分:1)
某些课程Guests
,Rooms
,Reservations
不是Serializable
。
或者它包含对不是Serializable
的对象的引用。
你需要修复它,错误就会消失。
http://docs.oracle.com/javase/7/docs/api/java/io/Serializable.html
答案 1 :(得分:0)
NotSerializableException表示系统无法序列化特定的对象状态。
答案 2 :(得分:0)
java.io.notserializableexception
表示您要保存的对象不是可序列化的。
您想要保存对象的ArrayList,因此其中一些对象不可序列化
您应该检查:Rooms
,Reservations
,Guests
是Serializable
如果没有,他们必须实现Serializable
接口。