Java:节省系统不会起作用

时间:2015-07-02 21:48:03

标签: java file save autosave

嗯,我正在制作游戏,在我的框架中我创建了一个保存系统。我的保存系统工作正常,但由于某种原因,它似乎不想保存我的文件!它给了我这个错误:

Chaos Blades: There was an error in creating the file!
Exception in thread "LWJGL Application" java.lang.NullPointerException
    at cb.core.FileBuilder.writeString(FileBuilder.java:31)
    at cb.player.PlayerStats.init(PlayerStats.java:46)
    at cb.player.Player.init(Player.java:17)
    at cb.entities.EntityManager.init(EntityManager.java:8)
    at cb.core.Initialiser.init(Initialiser.java:11)
    at cb.core.Main.create(Main.java:11)
    at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:143)
    at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:120)

这是我的FileBuilder类:

package cb.core;

import java.io.*;
import java.util.*;

public class FileBuilder {

    private Formatter formatter;

    public void openFile(String file) {
        try {
            formatter = new Formatter(file);
        } catch(Exception e) {
            System.err.println("Chaos Blades: There was an error in creating the file!");
        }
    }

    public void closeFile() {
        formatter.close();
    }

    public void writeInteger(int i) {
        formatter.format("%i \n", i);
    }

    public void writeFloat(float f) {
        formatter.format("%f \n", f);
    }

    public void writeString(String s) {
        formatter.format("%s \n", s);
    }

    public void appendInt(String file, int i) {
        try(PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter(file, true)))) {
            out.println(i);
        }catch (IOException e) {
            System.err.println("Darkbyte: Couldn't find file!");
        }
    }

    public void appendFloat(String file, float f) {
        try(PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter(file, true)))) {
            out.println(f);
        } catch (IOException e) {
            System.err.println("Darkbyte: Couldn't find file!");
        }
    }

    public void appendString(String file, String s) {
        try(PrintWriter out = new PrintWriter(new BufferedWriter(newFileWriter(file, true)))) {
            out.println(s);
        }catch (IOException e) {
            System.err.println("Darkbyte: Couldn't find file!");
        }
    }
}

这是我的PlayerStats课程:

package cb.player;

import java.io.*;

import cb.core.*;
import cb.core.FileReader;

public class PlayerStats {

    public enum Class {
        WARRIOR, ARCHER, MAGE
    }

    private static int health, attack, defense, melee, ranged, magic, crafting;
    private static int hxp, axp, dxp, mexp, rxp, mgxp, cxp;
    private static Class pclass;

    static void init() {
        FileBuilder saver = new FileBuilder();
        FileReader reader = new FileReader();

        File statfile = new File("saves/stats.cbsave");
        File xpfile = new File("saves/xp.cbsave");

        if(statfile.exists()) {
            reader.openFile("saves/stats.cbsave");
            health = reader.setVariableToIntUsingFilePosition(1);
            attack = reader.setVariableToIntUsingFilePosition(2);
            defense = reader.setVariableToIntUsingFilePosition(3);
            melee = reader.setVariableToIntUsingFilePosition(4);
            ranged = reader.setVariableToIntUsingFilePosition(5);
            magic = reader.setVariableToIntUsingFilePosition(6);
            crafting = reader.setVariableToIntUsingFilePosition(7);
            pclass.equals(reader.setVariableToStringUsingFilePosition(8));
            reader.closeFile();
        } else {
            health = 1;
            attack = 1;
            defense = 1;
            melee = 1;
            ranged = 1;
            magic = 1;
            crafting = 1;

            saver.openFile("saves/stats.cbsave");
            saver.writeString("" + health);
            saver.writeString("" + attack);
            saver.writeString("" + defense);
            saver.writeString("" + melee);
            saver.writeString("" + ranged);
            saver.writeString("" + magic);
            saver.writeString("" + crafting);
            saver.writeString(pclass.toString());
            saver.closeFile();
        }

        if(xpfile.exists()) {
            reader.openFile("saves/xp.cbsave");
            hxp = reader.setVariableToIntUsingFilePosition(1);
            axp = reader.setVariableToIntUsingFilePosition(2);
            dxp = reader.setVariableToIntUsingFilePosition(3);
            mexp = reader.setVariableToIntUsingFilePosition(4);
            rxp = reader.setVariableToIntUsingFilePosition(5);
            mgxp = reader.setVariableToIntUsingFilePosition(6);
            cxp = reader.setVariableToIntUsingFilePosition(7);
            reader.closeFile();
        } else {
            hxp = 0;
            axp = 0;
            dxp = 0;
            mexp = 0;
            rxp = 0;
            mgxp = 0;
            cxp = 0;

            saver.openFile("saves/xp.cbsave");
            saver.writeInteger(hxp);
            saver.writeInteger(axp);
            saver.writeInteger(dxp);
            saver.writeInteger(mexp);
            saver.writeInteger(rxp);
            saver.writeInteger(mgxp);
            saver.writeInteger(cxp);
            saver.closeFile();
        }
    }

    static void dispose() {
        FileBuilder saver = new FileBuilder();

        saver.openFile("saves/stats.cbsave");
        saver.writeInteger(health);
        saver.writeInteger(attack);
        saver.writeInteger(defense);
        saver.writeInteger(melee);
        saver.writeInteger(ranged);
        saver.writeInteger(magic);
        saver.writeInteger(crafting);
        saver.writeString(pclass.toString());
        saver.closeFile();

        saver.openFile("saves/xp.cbsave");
        saver.writeInteger(hxp);
        saver.writeInteger(axp);
        saver.writeInteger(dxp);
        saver.writeInteger(mexp);
        saver.writeInteger(rxp);
        saver.writeInteger(mgxp);
        saver.writeInteger(cxp);
        saver.closeFile();
    }

    public static int getHealth() {
        return health;
    }

    public static int getAttack() {
        return attack;
    }

    public static int getDefense() {
        return defense;
    }

    public static int getMelee() {
        return melee;
    }

    public static int getRanged() {
            return ranged;
    }

    public static int getMagic() {
        return magic;
    }

    public static int getCrafting() {
        return crafting;
    }

    public static int getHealthXP() {
        return hxp;
    }

    public static int getAttackXP() {
        return hxp;
    }

    public static int getDefenseXP() {
        return hxp;
    }

    public static int getMeleeXP() {
        return hxp;
    }

    public static int getRangedXP() {
        return hxp;
    }

    public static int getMagicXP() {
        return hxp;
    }

    public static int getCraftingXP() {
        return hxp;
    }

    public static void setHealth(int health) {
        PlayerStats.health = health;
    }

    public static void setAttack(int attack) {
            PlayerStats.attack = attack;
    }

    public static void setDefense(int defense) {
            PlayerStats.defense = defense;
    }

    public static void setMelee(int melee) {
            PlayerStats.melee = melee;
    }

    public static void setRanged(int ranged) {
        PlayerStats.ranged = ranged;
    }

    public static void setMagic(int magic) {
            PlayerStats.magic = magic;
    }

    public static void setCrafting(int crafting) {
        PlayerStats.crafting = crafting;
    }
}

我不确定是什么错误所以请帮助我!

1 个答案:

答案 0 :(得分:1)

openFile()失败,因为文件不存在或您无法写入文件。如果文件不存在,请尝试显式创建文件:

File statfile = new File("saves/stats.cbsave");

if(statfile.exists()) {
    ...
} else {
    statfile.createNewFile();
    ...
}
相关问题