【问题标题】:Java Save Class Not SavingJava保存类不保存
【发布时间】:2017-06-29 06:15:23
【问题描述】:

很抱歉,如果以前有人问过这个问题,但我要么找不到,要么无法理解比我更聪明的人给出的解决方案。

所以,我有一个需要游戏保存功能的 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();
    }
 }

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

任何帮助将不胜感激,并在此先感谢!

-鹰嘴豆泥

【问题讨论】:

  • 静态字段在 Java 中没有序列化。

标签: java file libgdx save


【解决方案1】:

静态变量没有被序列化,所以在反序列化过程中静态变量的值会从类中加载。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-29
    • 2012-09-13
    • 2022-01-17
    • 1970-01-01
    • 2011-11-09
    相关资源
    最近更新 更多