Java保存类不保存

时间:2017-06-29 06:15:24

标签: java file libgdx save

很抱歉,如果之前有人问这个问题,但是我要么找不到,要么无法理解人们比我更苛刻的解决方案。

所以,我有一个需要游戏保存功能的libgdx游戏。我决定通过将所有游戏数据存储到GameData类的路线,将一堆随机静态变量保存到带有.sav文件的文件中。

这是GameData类:

package Game;

import java.io.Serializable;

public class GameData implements Serializable
{
  private static final long serialVersionUID = 1;

  public static String name;
  public static String currentWeapon;

  public static void init()
  {
     name = "";
     currentWeapon = "";
  }
}

我使用一个名为Loadevas的类,使用静态方法save(int id),load(int id),delete(int id)和saveFileExists(int id),每个都执行它们的命名。这是:

public class Loadevas 
{
    public static GameData gd;

    public static void save(int id)
    {
        try{
            ObjectOutputStream out = new ObjectOutputStream(
                    new FileOutputStream("save" + id + ".sav"));
            out.writeObject(gd);
            out.flush();
            out.close();
        }catch(Exception e)
        {
            e.printStackTrace();
            Gdx.app.exit();
        }
    }

    public static void load(int id)
    {
        try{
            if(saveFileExists(id))
            {
                ObjectInputStream in = new ObjectInputStream(
                        new FileInputStream("save" + id + ".sav"));
                gd = (GameData) in.readObject();
                in.close();
            }
         }catch(Exception e)
        {
            e.printStackTrace();
            Gdx.app.exit();
        }
    }

    public static void delete(int id)
    {
        try{
            if(saveFileExists(id))
            {
                File f = new File("save" + id + ".sav");
                f.delete();
            }
        }catch(Exception e)
        {
            e.printStackTrace();
            Gdx.app.exit();
        }
    }

    public static boolean saveFileExists(int id)
    {
        File f = new File("save" + id + ".sav");
        return f.exists();
    }
 }

现在,它会将游戏数据保存为保存(无论数量).sav文件,但它不会跟踪对GameData所做的任何更改。例如,当我将名称String设置为" derp"并打印它,它将打印derp。但是,当我保存它,关闭游戏,重新启动它,加载保存并开始打印时,它会打印出null,这甚至不是起始值,所以我很困惑。

任何帮助将不胜感激,并提前感谢!

-Hummus

1 个答案:

答案 0 :(得分:0)

静态变量未被序列化,因此在反序列化期间,静态变量值将从类中加载。

因此,在加载数据时,变量中的null为null,因为此时类变量为null(将加载当前值)。