簡體   English   中英

在Java中序列化數組列表

[英]Serializing array lists in java

我正在用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();
}  

僅供參考,這是Guest類的組成部分:

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

任何想法如何解決這個問題? 非常感謝您的幫助。

GuestsRoomsReservations某些類別不可Serializable 或者它包含對不能Serializable的對象的引用。 您需要修復該錯誤,該錯誤將消失。

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

NotSerializableException表示系統無法序列化特定對象狀態。

  1. 確保完整序列化過程中的所有AGGREGATED對象都是可序列化的。
  2. 閱讀完整的日志並跟蹤對象的名稱。

java.io.notserializableexception表示您要保存的對象不可序列化。

您要保存對象的ArrayList,因此其中一些對象不可序列化

您應檢查: RoomsReservationsGuestsSerializable否則,它們必須實現可Serializable接口。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM