嗯,我正在制作游戏,在我的框架中我创建了一个保存系统。我的保存系统工作正常,但由于某种原因,它似乎不想保存我的文件!它给了我这个错误:
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;
}
}
我不确定是什么错误所以请帮助我!
答案 0 :(得分:1)
openFile()
失败,因为文件不存在或您无法写入文件。如果文件不存在,请尝试显式创建文件:
File statfile = new File("saves/stats.cbsave");
if(statfile.exists()) {
...
} else {
statfile.createNewFile();
...
}