java.io.NotSerializableException Libgdx

时间:2016-01-30 04:15:34

标签: java arraylist libgdx serializable

我正在尝试为我的LibGdx游戏实现一个保存功能。这只是为了学习目的,所以我试图在手机上重新创建Fallout Shelter游戏,但就像桌面版一样。当我尝试保存或加载时,我收到此错误:

private void Load() {
    try {
        // Open file to read from, named SavedObj.sav.
        FileInputStream saveFile = new FileInputStream("SaveGame.sav");

        // Create an ObjectInputStream to get objects from save file.
        ObjectInputStream save = new ObjectInputStream(saveFile);

        energy = (Integer) save.readObject();
        System.out.println(energy);
        food = (Integer) save.readObject();
        System.out.println(food);
        water = (Integer) save.readObject();
        System.out.println(water);
        maxEnergy = (Integer) save.readObject();
        System.out.println(maxEnergy);
        maxFood = (Integer) save.readObject();
        System.out.println(maxFood);
        maxWater = (Integer) save.readObject();
        System.out.println(maxWater);
        caps = (Integer) save.readObject();
        System.out.println(caps);
        maxDwellers = (Integer) save.readObject();
        System.out.println(maxDwellers);
        dwellers = (Array<Dweller>) save.readObject();
        //Close the save file
        save.close(); 
    } catch (Exception exc) {
        exc.printStackTrace(); // If there was an error, print the info.
    }
}

这是加载方法,在游戏启动时调用并始终导致错误

dwellers = (Array<Dweller>) save.readObject();

当我尝试加载Dwellers列表时,它总是发现该行的问题(保存具有相同的错误并在同一行中发现错误)

av_get_bytes_per_sample( static_cast<AVSampleFormat>(format) )
#undef av_err2str
#define av_err2str(errnum) \
av_make_error_string((char*)__builtin_alloca(AV_ERROR_MAX_STRING_SIZE), AV_ERROR_MAX_STRING_SIZE, errnum)
#undef av_ts2timestr
#define av_ts2timestr(ts, tb) \
av_ts_make_time_string((char*)__builtin_alloca(AV_TS_MAX_STRING_SIZE), ts, tb)

然后它给出了上面提到的错误。这个类正在使用java.io.Serializable并且已经实现了,正如其他类似的问题所表明的那样,但无论是否实现它我仍然会得到相同的错误。

1 个答案:

答案 0 :(得分:1)

例外情况是说您正在尝试序列化com.badlogic.gdx.utils.Array的实例...而且您无法做到。

根据javadoc,您尝试序列化的Array类未实现Serializable

您尚未提供足够的信息以进行正确的诊断/修复,但我怀疑Dweller直接或间接使用Array类,这是根本原因。可能的解决方案可能是标记Array字段瞬态,和/或实现自定义序列化方法(readObjectwriteObject等)。