Когда я загружаю этот файл, я всегда получаю исключение NullPointerException. Я много пробовал и не мог найти способ исправить. При сохранении я использовал объект Game.

     @Override
        public void load(Superhero aHero,Villain aVillain) throws IOException, ClassNotFoundException {

        ObjectInputStream ois = null;
        FileInputStream fis = null;
        File f = new File("C:\\prog24178\\dcgames.dat");
        Game aGame = new Game(aHero,aVillain);
        try {
            fis = new FileInputStream(f);
            ois = new ObjectInputStream(fis);
            while(true){
                aGame = (Game) ois.readObject();
                System.out.println(aGame);

            }
        } catch(EOFException eof){
            ois.close();
        } catch (FileNotFoundException ex) {
            Logger.getLogger(DcGameController.class.getName()).log(Level.SEVERE, null, ex);
        } 

    }

Когда я открываю файл, я вижу что-то вроде этого:

    ’ sr 
    model.Game      ^r Z gameOverZ heroTurnL theHerot Lmodel/Superhero;L 
    theVillaint Lmodel/Villain;xp  sr model.hero.Batman      ^r Z armedL sidekickq ~ xr model.Superhero      ^r I energyZ secretIdentityL codenamet Ljava/lang/String;L hometownq ~ xr model.Avatar      ^r 
    I agilityI     enduranceI fightingI   hitPointsI  intuitionI psycheI reasonI strengthL     firstNameq ~ L lastNameq ~ xp            W            t  q ~      t Batmant Gotham Citysq ~                                 t Dickt Grayson    ppsr model.villain.Cheetah      ^r  xr 
    model.Villain      ^r I energyZ insaneL codenameq ~ xq ~             b            t   Priscillat Rich    t Cheetah

Итак, я знаю, что это работает, но я хотел бы прочитать, и после этого я мог бы установить настройки, которые мне нужно использовать.

Это мой метод сохранения:

    @Override
    public void saveGame(Game aGame) {
        File aSaveFile = new File("C:\\prog24178\\dcgames.dat");
        FileOutputStream fos = null;

        if (!aSaveFile.getParentFile().exists()) {
            aSaveFile.getParentFile().mkdir();
        }
        try {
            if (!aSaveFile.exists()) {
                aSaveFile.createNewFile();
            }
            if (aSaveFile.length() > 0) {
                fos = new FileOutputStream(aSaveFile, true);
            } else {
                fos = new FileOutputStream(aSaveFile, false);
            }
            if (oos == null) {
                oos = new ObjectOutputStream(fos);
            }
            oos.writeObject(aGame);
        } catch (FileNotFoundException ex) {

        } catch (Exception x) {
            System.out.println("Something bad happened" + x);
        }
    }

Спасибо за помощь в решении моей проблемы.

-2
Jean-Mathieu 31 Мар 2014 в 05:52
 – 
Sotirios Delimanolis
31 Мар 2014 в 05:54
Я знаю это. Вот что я сделал.
 – 
Jean-Mathieu
31 Мар 2014 в 07:10
Где происходит исключение?
 – 
Sotirios Delimanolis
31 Мар 2014 в 07:11
Когда загружаю. Получаю: model.Game@1f0e5b38 и все
 – 
Jean-Mathieu
31 Мар 2014 в 07:27
Тогда о каком NullPointerException вы говорите? Этот model.Game@1f0e5b38 является результатом Object#toString(), который наследуют все классы. Вам необходимо переопределить метод toString() в вашем классе Game, если вы хотите настраиваемое представление toString.
 – 
Sotirios Delimanolis
31 Мар 2014 в 07:29

1 ответ

Лучший ответ

Думаю, есть 2 проблемы, которые стоит проверить,

1. fos = new FileOutputStream(aSaveFile, true);
если в aSaveFile уже есть данные и вы добавляете данные другого объекта в aSaveFile, его данные будут запутаны, и вы не сможете вернуть объект.

2. oos.writeObject(aGame);
когда вы закончите writeObject (), вы должны очистить буфер потока с помощью oos.flush ();

0
user3479689 31 Мар 2014 в 08:05
Это исправляет ошибку, но в файле есть кое-что еще. Дай только модель. Game@77011e14
 – 
Jean-Mathieu
31 Мар 2014 в 08:53