对不起,如果这是一个简单的问题,但我是新手在Java编程和无法处理与Java保存文件Bug的一个问题..问题是,有时它保存并加载值没有错误,有时它显示我错误,仍然加载。但有时savefile不会工作。Java保存文件错误
错误,我得到:
java.io.EOFException
at java.io.ObjectInputStream$PeekInputStream.readFully(Unknown Source)
at java.io.ObjectInputStream$BlockDataInputStream.readShort(Unknown Source)
at java.io.ObjectInputStream.readStreamHeader(Unknown Source)
at java.io.ObjectInputStream.<init>(Unknown Source)
at Clicker.ClickerGame.LoadFile(ClickerGame.java:2479)
at Clicker.mainClass.main(mainClass.java:27)
我的主要(入门级):
package Clicker;
import javax.swing.JFrame;
public class mainClass {
public static void main(String[] args) {
ClickerGame CG = new ClickerGame();
JFrame frame = new JFrame("CarCollectionarV1");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
CG.addComponentToPane(frame.getContentPane());
frame.pack();
frame.setVisible(true);
frame.setResizable(true);
frame.setSize(1000, 700);
CG.LoadFile();
boolean GameLoop = true;
while(GameLoop){
CG.refresh();
CG.SaveFile();
}
}
}
ClickerGame类(在哪里SAVEFILE和的LoadFile功能):
public void SaveFile(){
try{
File SaveFile = new File("SaveFile.sav");
if(!SaveFile.exists()) {
SaveFile.createNewFile();
}
FileOutputStream saveFileSub = new FileOutputStream(SaveFile);
ObjectOutputStream save = new ObjectOutputStream(saveFileSub);
save.writeObject(CarMain.main);
save.writeObject(Box.boxes);
save.writeObject(CarFrame.frames);
save.writeObject(Part.parts);
save.writeObject(CarsLv1.cars);
save.writeObject(CarsLv2.cars);
save.writeObject(CarsLv3.cars);
save.writeObject(CarsLv4.cars);
save.writeObject(CarsLv5.cars);
save.writeObject(CarsLv6.cars);
save.writeObject(CarsLv7.cars);
save.writeObject(CarsLv8.cars);
save.writeObject(CarsLv9.cars);
save.writeObject(CarsLv10.cars);
save.close();
}
catch(Exception exc){
exc.printStackTrace();
}
}
public void LoadFile(){
try{
File SaveFile = new File("SaveFile.sav");
if(!SaveFile.exists()) {
SaveFile.createNewFile();
}
FileInputStream SaveFileSub = new FileInputStream(SaveFile);
ObjectInputStream load = new ObjectInputStream(SaveFileSub);
CarMain.main = (Integer[]) load.readObject();
Box.boxes = (Integer[]) load.readObject();
CarFrame.frames = (Integer[]) load.readObject();
Part.parts = (Integer[]) load.readObject();
CarsLv1.cars = (String[]) load.readObject();
CarsLv2.cars = (String[]) load.readObject();
CarsLv3.cars = (String[]) load.readObject();
CarsLv4.cars = (String[]) load.readObject();
CarsLv5.cars = (String[]) load.readObject();
CarsLv6.cars = (String[]) load.readObject();
CarsLv7.cars = (String[]) load.readObject();
CarsLv8.cars = (String[]) load.readObject();
CarsLv9.cars = (String[]) load.readObject();
CarsLv10.cars = (String[]) load.readObject();
load.close();
}
catch(Exception exc){
exc.printStackTrace();
}
}
关于代码质量的备注:似乎您已经了解了数组的概念......如果是这样:那么将其应用于您的“CarLvxx”字段。给定变量名称.1,.2,...然后有明确的代码来处理它们就是超级糟糕的,不应该这样做。此外:不要在名称中缩写。输入时保存几个字符没有意义;因为它使得每次必须阅读源代码变得更加困难。 – GhostCat