Hallo erstmal im Forum.
Jetzt zu meinem Problem : :autsch:
Ich muss für die Schule ( keine Hausaufgabe :bae: ) ein Programm schreiben mit dem man die Punkte einzelner Schüler verwalten kann.
Soweit ist das Programm fertig, es fehlt noch die Serialisierung.
Und genau hier liegt mein Problem.
Alle nötigen Klassen implementieren Serializable
Ich habe in der Klasse PlayerManager ein Vector<Player> der alle Spieler verwaltet.
In der Klasse Player hab ich eine weitere Klasse GameScore die eine HashMap<Game,Long> enthält, die die Punkte den einzelnen Spielen zuordnet.
Ich speichere also den Vector<Player>ab, und lade ihn wieder.
Die HashMap<Game,Long> wird aber nicht wieder geladen, alle Punkte der einzelnen Player sind auf null.
Werden die Daten von der HashMap einfach nicht gespeichert, oder liegt es an der Serialisierung??
Hier noch die Klassen GameScore und PlayerManager :
Jetzt zu meinem Problem : :autsch:
Ich muss für die Schule ( keine Hausaufgabe :bae: ) ein Programm schreiben mit dem man die Punkte einzelner Schüler verwalten kann.
Soweit ist das Programm fertig, es fehlt noch die Serialisierung.
Und genau hier liegt mein Problem.
Alle nötigen Klassen implementieren Serializable
Ich habe in der Klasse PlayerManager ein Vector<Player> der alle Spieler verwaltet.
In der Klasse Player hab ich eine weitere Klasse GameScore die eine HashMap<Game,Long> enthält, die die Punkte den einzelnen Spielen zuordnet.
Ich speichere also den Vector<Player>ab, und lade ihn wieder.
Die HashMap<Game,Long> wird aber nicht wieder geladen, alle Punkte der einzelnen Player sind auf null.
Werden die Daten von der HashMap einfach nicht gespeichert, oder liegt es an der Serialisierung??
Hier noch die Klassen GameScore und PlayerManager :
Code:
package de.mueller.game;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.Vector;
import de.mueller.swing.frame.JScoreFrame;
public class PlayerManager {
private final static Vector<Player> players = new Vector<Player>();
private static PlayerManager manager;
private PlayerManager() {
}
public static void savePlayers(File path) {
ObjectOutputStream out = null;
FileOutputStream fos = null;
try {
fos = new FileOutputStream(path);
out = new ObjectOutputStream(fos);
out.writeObject(players);
} catch (FileNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
fos.close();
out.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public static void loadPlayers(JScoreFrame f, File path) {
FileInputStream in = null;
ObjectInputStream oin = null;
Vector<Player> players = new Vector<Player>();
try {
in = new FileInputStream(path);
oin = new ObjectInputStream(in);
players = (Vector<Player>) oin.readObject();
PlayerManager.setDataModel(players);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
f.getDataInputTable().updateUI();
f.getViewTable().updateUI();
oin.close();
in.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
private static void fillPlayers() {
players.add(new Player("Max Mustermann", "10"));
}
public static Vector<Player> getDataModel() {
if (players.isEmpty()) {
fillPlayers();
}
return players;
}
public static void setDataModel(Vector<Player> newplayers) {
players.removeAllElements();
for (Player p : newplayers) {
players.add(p);
}
}
@Deprecated
public static void addPlayer(Player p) {
players.add(p);
}
@Deprecated
public static void removePlayer(int index) {
players.remove(index);
}
public static Player getPlayer(int index) {
return players.get(index);
}
}
Code:
package de.mueller.game;
import java.io.Serializable;
import java.util.HashMap;
public class GameScore implements Serializable {
/**
*
*/
private static final long serialVersionUID = -2404163886339637L;
private HashMap<Game, Long> scores = new HashMap<Game, Long>();
/**
* TODO Documentation
*
* @param scores
* the scores to set
*/
public void setScores(HashMap<Game, Long> scores) {
this.scores = scores;
}
private long lastKnownScore = 0L;
public HashMap<Game, Long> getScores() {
return scores;
}
public Long getScoreFor(Game g) {
return scores.get(g);
}
public void addScoreFor(Game g, long score) {
scores.put(g, scores.get(g) + Math.round(score * g.getFactor()));
lastKnownScore = (score);
}
public GameScore() {
System.out.println("Called");
scores.put(Games.DOSENWERFEN, 0L);
scores.put(Games.FREIWURF, 0L);
scores.put(Games.HULAHOOP, 0L);
scores.put(Games.RINGWERFEN, 0L);
scores.put(Games.SEILSPRINGEN, 0L);
scores.put(Games.TORWAND, 0L);
}
public void ensureScoreFilled() {
System.out.println("ensureScoreFilled");
System.out.println(scores.get(Games.TORWAND));
for (int i = 0; i < Games.getGames().length; i++) {
if (scores.get(Games.getGames()[i]) == null) {
scores.put(Games.getGames()[i], 0L);
}
}
}
public String length() {
return scores.size() + "";
}
public long getLastKnownScore() {
return lastKnownScore;
}
}