Java:保存系统赢得';行不通
我正在做一个游戏,在我的框架中我创建了一个保存系统。我的保存系统工作正常,但出于某种原因,它似乎不想保存我的文件!它给了我这个错误:Java:保存系统赢得';行不通,java,file,save,autosave,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:3
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;
}
}
我不知道怎么了,请帮帮我 openFile()
失败,因为该文件不存在或无法写入。如果文件不存在,请尝试显式创建这些文件:
File statfile = new File("saves/stats.cbsave");
if(statfile.exists()) {
...
} else {
statfile.createNewFile();
...
}
添加到catch块
e.printStackTrace()
中的openFile()
方法中,抛出了一个异常。java.io.Formatter类可以创建文件dude,这不是答案。我刚刚尝试了这个方法,但它不起作用,很抱歉dudeFormatter绝对为null-发布e.printStackTrace()的结果
在openFile()
catch block..Exception in thread“LWJGL Application”java.lang.NullPointerException在cb.player.PlayerStats.init(PlayerStats.java:25)在cb.player.player.init(player.java:17)在cb.entities.EntityManager.init(EntityManager.java:8)在cb.core.Initialiser.init(Initialiser.java:11)在cb.core.Main.create.create(Main.java:11)在com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:143)在com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:120)上,看起来这是来自FileReader.openfile()
您尚未发布其源代码-确定异常的来源并发布相关代码。