首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java保存类不保存

问Java保存类不保存
EN

Stack Overflow用户
提问于 2017-06-29 14:15:24
回答 1查看 345关注 0票数 0

如果之前有人问过这个问题,我很抱歉,但我要么找不到它,要么就是不能理解比我更优秀的人给出的解决方案。

所以,我有一个libgdx游戏,它需要游戏保存的功能。我决定把我所有的游戏数据存储到一个GameData类中,用一堆随机的静态变量和.sav文件一起保存到文件中。

下面是GameData类:

代码语言:javascript
复制
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 )、load(int )、delete(int )和saveFileExists(int ),每个方法都以它们的名字命名。这就是它:

代码语言:javascript
复制
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所做的任何更改。例如,当我将name字符串设置为" derp“并打印它时,它将打印derp。然而,当我保存它,关闭游戏,重新启动它,加载保存,并开始打印时,它将打印出null,这甚至不是起始值,所以我非常困惑。

如有任何帮助,我们将不胜感激,并提前表示感谢!

-Hummus

EN

回答 1

Stack Overflow用户

发布于 2017-06-29 15:02:44

静态变量不是序列化的,所以在反序列化期间,静态变量的值将从类中加载。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44817609

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档