Hey Leute, versuche gerade eine Speichern-Funktion für ein Spiel zu implementieren. Das Spiel soll 4 Speicherslots haben, die bei jedem Neustart automatisch geladen werden sollen. Da es nicht ausschließlich um das Spiel geht und es wahrscheinlich an meinen nicht vorhanden Skills liegt, poste ich es mal in diesem Anfänger Thread.
Die Klasse SaveGames unten, soll byte Arrays in einer ArrayList speichern, was dann im SaveGames Objekt auf der Festplatte gespeichert werden soll. Aber irgendwie bekomme ich Nullpointer nachdem ich das Programm neustarte und versuche ein Spiel zu laden oder zu speichern. Wenn es noch keine gespeicherte Datei gibt und ich im Spiel einen Spielstand speicher, dann geht das problemlos auch auf mehreren Indizes auf der ArrayList und der lädt auch ständig die Datei mit um zu testen ob ein Index leer ist.
Wenn ich das Programm neustarte und versuche ein anderes Spiel zu speichern, bekomme ich einen Nullpointer bei `Collections.replaceAll(saves, saves.get(slot), savegame);` Ist das das Problem vielleicht?
Nach dem Neustarten kommt hier der Nuller, wenn ich laden will:
if (SaveGames.getInstance().getSaveGames().get(slot) == null)
Das ist die SaveGames Klasse, könnt ihr da Fehler entdecken?
Die Klasse SaveGames unten, soll byte Arrays in einer ArrayList speichern, was dann im SaveGames Objekt auf der Festplatte gespeichert werden soll. Aber irgendwie bekomme ich Nullpointer nachdem ich das Programm neustarte und versuche ein Spiel zu laden oder zu speichern. Wenn es noch keine gespeicherte Datei gibt und ich im Spiel einen Spielstand speicher, dann geht das problemlos auch auf mehreren Indizes auf der ArrayList und der lädt auch ständig die Datei mit um zu testen ob ein Index leer ist.
Wenn ich das Programm neustarte und versuche ein anderes Spiel zu speichern, bekomme ich einen Nullpointer bei `Collections.replaceAll(saves, saves.get(slot), savegame);` Ist das das Problem vielleicht?
Nach dem Neustarten kommt hier der Nuller, wenn ich laden will:
if (SaveGames.getInstance().getSaveGames().get(slot) == null)
Das ist die SaveGames Klasse, könnt ihr da Fehler entdecken?
Code:
public class SaveGames implements Serializable {
private static final long serialVersionUID = 1893501111568176741L;
private static SaveGames instance;
private static ArrayList<byte[]> saves;
private static String[] saveNames;
Date datumHeute = new Date();
SimpleDateFormat myDateFormat = new SimpleDateFormat("dd.MM.yyyy, HH:mm:ss");
private SaveGames() {
saves = new ArrayList<byte[]>(4);
saves.add(0, null);
saves.add(1, null);
saves.add(2, null);
saves.add(3, null);
saveNames = new String[4];
}
public String getSaveName(int slot) {
return saveNames[slot];
}
public ArrayList<byte[]> getSaveGames() {
return saves;
}
public void addSaveGame(byte[] savegame, int slot) {
Collections.replaceAll(saves, saves.get(slot), savegame);
saveNames[slot] = ("" + myDateFormat.format(datumHeute));
}
public static SaveGames getInstance() {
if (instance == null) {
loadFromDrive();
}
return instance;
}
public void saveToDrive() {
FileOutputStream b = null;
try {
b = new FileOutputStream("save.ser");
ObjectOutputStream o = new ObjectOutputStream(b);
o.writeObject(this);
o.close();
} catch (IOException ioe) {
}
}
public static void loadFromDrive() {
FileInputStream b = null;
try {
b = new FileInputStream("save.ser");
ObjectInputStream o = new ObjectInputStream(b);
instance = (SaveGames) o.readObject();
o.close();
} catch (NullPointerException | IOException | ClassNotFoundException e) {
System.out.println("Class not Found!");
instance = new SaveGames();
}
}
}