第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 Java 11 中關(guān)閉打開的程序后如何反序列化對象

在 Java 11 中關(guān)閉打開的程序后如何反序列化對象

慕尼黑8549860 2022-06-15 10:38:26
我有一個程序,我試圖在其中實現(xiàn)對象的保存和加載,但是在程序關(guān)閉后我無法讓加載工作,因此只有在程序打開時有效地保存和加載工作,但沒有數(shù)據(jù)永遠程序啟動后加載。我認為這與過度閱讀有關(guān)。我創(chuàng)建了一個測試程序,看看我是否可以只使用一個簡單的 Person 類來讓它工作。我將我的 Peson 對象存儲在 ArrayList 中并對其進行序列化,然后對其進行反序列化。目前我將所有加載的 Person 對象存儲在 JComboBox 中。我在網(wǎng)上查過,找不到任何有用的東西。另請注意,我知道使用序列化不是保存對象的最佳方法,但它適合用于我的程序。我的應(yīng)用類:import javax.swing.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.io.*;import java.util.ArrayList;public class App  extends JFrame {    public static JComboBox<Person> peopleBox;    public App(){        try {            Person.peopleList = loadList();        }        catch(IOException | ClassNotFoundException e){            System.out.println(e.getMessage());        }        try {            saveList(Person.peopleList);        }catch (IOException e){            System.out.println(e.getMessage());        }        peopleBox = new JComboBox<>();        peopleBox.setModel(getComboBoxModel(Person.peopleList));        add(peopleBox);        pack();        setSize(600, 400);        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);    }    public DefaultComboBoxModel<Person> getComboBoxModel(ArrayList<Person> peopleList){        Person[] comboBoxModel = peopleList.toArray(new Person[0]);        return new DefaultComboBoxModel<>(comboBoxModel);    }    public static void saveList(ArrayList<Person> peopleList) throws IOException {        ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream("test.bin"));        objectOutputStream.writeObject(peopleList);    }    public static ArrayList<Person> loadList() throws IOException, ClassNotFoundException {        ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream("test.bin"));        Person.peopleList = (ArrayList<Person>) objectInputStream.readObject();        return  Person.peopleList;}我希望當(dāng)我將列表保存到“test.bin”文件時,關(guān)閉程序,然后再次打開它,它將加載列表并顯示我在關(guān)閉程序之前創(chuàng)建的對象。我感謝任何幫助,謝謝。
查看完整描述

1 回答

?
猛跑小豬

TA貢獻1858條經(jīng)驗 獲得超8個贊

在從文件加載 Person 之前,您正在保存一個空列表。我建議這種方法:


import javax.swing.*;

import java.io.*;

import java.util.ArrayList;

import java.util.List;


public class App extends JFrame {


    public static JComboBox<Person> peopleBox;


    public App() {

        try {

            loadList();

        } catch (IOException | ClassNotFoundException e) {

            System.out.println(e.getMessage());

        }

        try {

            saveList(Person.peopleList);

        } catch (IOException e) {

            System.out.println(e.getMessage());

        }

        setSize(600, 400);

        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

    }


    public void updateData(){

        peopleBox = new JComboBox<>();

        peopleBox.setModel(getComboBoxModel(Person.peopleList));

        add(peopleBox);

        pack();

    }


    public DefaultComboBoxModel<Person> getComboBoxModel(ArrayList<Person> peopleList) {

        Person[] comboBoxModel = peopleList.toArray(new Person[0]);

        return new DefaultComboBoxModel<>(comboBoxModel);

    }


    public static void saveList(ArrayList<Person> peopleList) throws IOException {

        ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream("test.bin"));

        objectOutputStream.writeObject(peopleList);

    }


    public static void loadList() throws IOException, ClassNotFoundException {

        ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream("test.bin"));

        Person.peopleList.addAll((List<Person>) objectInputStream.readObject());

    }


    public static void main(String[] args) {

        App app = new App();

        Person p = new Person("Sean2", 24);

        try {

            saveList(Person.peopleList);

        } catch (IOException e) {

            System.out.println(e.getMessage());

        }

        app.updateData();

        app.setVisible(true);

    }

}


查看完整回答
反對 回復(fù) 2022-06-15
  • 1 回答
  • 0 關(guān)注
  • 99 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號