感谢您在这方面的帮助:)我正在使用MVC架构。下面是我的班级“Spiel”。基本上是我模特的母亲。模型中的其他班级都住在这里。“Spiel”本身被“Fassade”与“Speicher”(保存/加载Spiel的类)一起使用,这是唯一一个不在“Spiel”内部的模型类。
“Spiel”及其下模型中的每个类都实现了可序列化。但在某些类中,我在第一次初始化它们时创建了新的Image()。加载保存的“Spiel”时,JavaFX无法重新创建图像,因为它们没有序列化。
你知道我如何解决这个问题以便保存/加载游戏吗?
public class Spiel implements Serializable {
private static final long serialVersionUID = 16L;
private Spielzug spielzug;
private ArrayList<Spieler> spieler;
private Map map;
private Deck deck;
private Ablage ablage;
private OffeneKarten offeneKarten;
private ArrayList<RoutenBP> routenBP;
private ArrayList<StadtBP> stadtBP;
private AlleProvinzenBP alleProvinzenBP;
public Spiel(ArrayList<Spieler> spieler) {
this.spieler = spieler;
map = new Map();
deck = new Deck();
ablage = new Ablage(map);
ablage.kartenVerteilen(deck.getDeck());
offeneKarten = new OffeneKarten(deck);
spielzug = new Spielzug(spieler.get(0));
bpInitialisieren();
}
private void bpInitialisieren()
{
routenBP = new ArrayList<RoutenBP>();
ArrayList<Image> routenImg = new ArrayList<Image>();
routenImg.add(new Image("Bilder/bp_S5_2.png"));
routenImg.add(new Image("Bilder/bp_S5_1.png"));
RoutenBP routenbp_1 = new RoutenBP(5, 2, 2, "Du brauchst eine geschlossene Route der Laenge 5, um dieses Bonusplaettchen zu erhalten.", routenImg);
routenBP.add(routenbp_1);
routenImg.clear();
routenImg.add(new Image("Bilder/bp_S6_3.png"));
routenImg.add(new Image("Bilder/bp_S6_2.png"));
routenImg.add(new Image("Bilder/bp_S6_1.png"));
RoutenBP routenbp_2 = new RoutenBP(6, 3, 3, "Du brauchst eine geschlossene Route der Laenge 6, um dieses Bonusplaettchen zu erhalten.", routenImg);
routenBP.add(routenbp_2);
routenImg.clear();
routenImg.add(new Image("Bilder/bp_S7_4.png"));
routenImg.add(new Image("Bilder/bp_S7_3.png"));
routenImg.add(new Image("Bilder/bp_S7_2.png"));
routenImg.add(new Image("Bilder/bp_S7_1.png"));
RoutenBP routenbp_3 = new RoutenBP(6, 4, 4, "Du brauchst eine geschlossene Route der Laenge 7, um dieses Bonusplaettchen zu erhalten.",routenImg);
routenBP.add(routenbp_3);
stadtBP = new ArrayList<StadtBP>();
ArrayList<Image> stadtbpImg = new ArrayList<Image>();
stadtbpImg.add(new Image("Bilder/bp_lilaP_3.png"));
stadtbpImg.add(new Image("Bilder/bp_lilaP_2.png"));
stadtbpImg.add(new Image("Bilder/bp_lilaP_1.png"));
ArrayList<Karte> benoetigteStaedte = new ArrayList<Karte>();
benoetigteStaedte.add(map.getStadt(3));
benoetigteStaedte.add(map.getStadt(4));
benoetigteStaedte.add(map.getStadt(10));
StadtBP stadtbp_1 = new StadtBP(benoetigteStaedte, 3, 3, "Du brauchst in Freiburg, Mannheim und Carlsruhe ein Haus, um dieses Bonusplaettchen zu erhalten.",stadtbpImg);
stadtBP.add(stadtbp_1);
stadtbpImg.clear();
stadtbpImg.add(new Image("Bilder/bp_blauP_3.png"));
stadtbpImg.add(new Image("Bilder/bp_blauP_1.png"));
stadtbpImg.add(new Image("Bilder/bp_blauP_2.png"));
benoetigteStaedte.clear();
benoetigteStaedte.add(map.getStadt(1));
benoetigteStaedte.add(map.getStadt(21));
benoetigteStaedte.add(map.getStadt(6));
StadtBP stadtbp_2 = new StadtBP(benoetigteStaedte, 3, 3, "Du brauchst in Basel, Zuerich und Innsbruck ein Haus, um dieses Bonusplaettchen zu erhalten.",stadtbpImg);
stadtBP.add(stadtbp_2);
stadtbpImg.clear();
stadtbpImg.add(new Image("Bilder/bp_gruenP_3.png"));
stadtbpImg.add(new Image("Bilder/bp_gruenP_2.png"));
stadtbpImg.add(new Image("Bilder/bp_gruenP_1.png"));
benoetigteStaedte.clear();
benoetigteStaedte.add(map.getStadt(17));
benoetigteStaedte.add(map.getStadt(18));
benoetigteStaedte.add(map.getStadt(19));
StadtBP stadtbp_3 = new StadtBP(benoetigteStaedte, 3, 3, "Du brauchst in Sigmaringen, Stuttgart und Ulm ein Haus, um dieses Bonusplaettchen zu erhalten.",stadtbpImg);
stadtBP.add(stadtbp_3);
stadtbpImg.clear();
stadtbpImg.add(new Image("Bilder/bp_rotP_4.png"));
stadtbpImg.add(new Image("Bilder/bp_rotP_3.png"));
stadtbpImg.add(new Image("Bilder/bp_rotP_2.png"));
benoetigteStaedte.clear();
benoetigteStaedte.add(map.getStadt(2));
benoetigteStaedte.add(map.getStadt(8));
benoetigteStaedte.add(map.getStadt(14));
benoetigteStaedte.add(map.getStadt(16));
StadtBP stadtbp_4 = new StadtBP(benoetigteStaedte, 4, 3, "Du brauchst in Budweis, Pilsen, Linz und Salzburg ein Haus, um dieses Bonusplaettchen zu erhalten.",stadtbpImg);
stadtBP.add(stadtbp_4);
stadtbpImg.clear();
stadtbpImg.add(new Image("Bilder/bp_beigeP_5.png"));
stadtbpImg.add(new Image("Bilder/bp_beigeP_4.png"));
stadtbpImg.add(new Image("Bilder/bp_beigeP_3.png"));
stadtbpImg.add(new Image("Bilder/bp_beigeP_2.png"));
benoetigteStaedte.clear();
benoetigteStaedte.add(map.getStadt(0));
benoetigteStaedte.add(map.getStadt(5));
benoetigteStaedte.add(map.getStadt(7));
benoetigteStaedte.add(map.getStadt(11));
benoetigteStaedte.add(map.getStadt(12));
benoetigteStaedte.add(map.getStadt(13));
benoetigteStaedte.add(map.getStadt(15));
benoetigteStaedte.add(map.getStadt(20));
StadtBP stadtbp_5 = new StadtBP(benoetigteStaedte, 5, 4, "Du brauchst in Augsburg, Ingolstadt, Kempten, Münschen, Nürnberg, Passau, Regensburg und Würzburg ein Haus, um dieses Bonusplaettchen zu erhalten.",stadtbpImg);
stadtBP.add(stadtbp_5);
ArrayList<Image> alleProvImg = new ArrayList<Image>();
alleProvImg.add(new Image("Bilder/bp_alleP_6.png"));
alleProvImg.add(new Image("Bilder/bp_alleP_5.png"));
alleProvImg.add(new Image("Bilder/bp_alleP_4.png"));
alleProvImg.add(new Image("Bilder/bp_alleP_3.png"));
alleProvinzenBP = new AlleProvinzenBP(map.getProvinzen(), 6,4, "Du brauchst in min. einer Stadt jeder Provinz ein Haus, um dieses Bonusplaettchen zu erhalten.",alleProvImg);
}
public void naechsterSpieler() {
int idx = spielzug.getAktuellerSpieler().getSpielerNr();
if( idx == spieler.size() ) {
idx = 0;
}
System.out.println("SPIEL: Anzahl spieler: "+spieler.size());
spielzug.setAktuellerSpieler(spieler.get(idx));
System.out.println("SPIEL: nächster Spieler ist "+spieler.get(idx).getName()+" mit SpielerNr "+ spieler.get(idx).getSpielerNr());
}
public void bpVergeben()
{
for(RoutenBP rbp : routenBP)
{
if(rbp.bedingungErfuellt(spielzug.getAktuellerSpieler().getRoute().getStaedte(), spielzug))
{
spielzug.getAktuellerSpieler().getRoutenBP().add(rbp);
int p = spielzug.getAktuellerSpieler().getPunkte()
+ rbp.getPunkte(spielzug.getPhase());
spielzug.getAktuellerSpieler().setPunkte(p);
}
}
for(StadtBP sbp : stadtBP)
{
if(sbp.bedingungErfuellt(spielzug.getAktuellerSpieler().getRoute().getStaedte(), spielzug))
{
spielzug.getAktuellerSpieler().getStadtBP().add(sbp);
int p = spielzug.getAktuellerSpieler().getPunkte()
+sbp.getPunkte(spielzug.getPhase());
spielzug.getAktuellerSpieler().setPunkte(p);
}
}
if(alleProvinzenBP.bedingungErfuellt(spielzug.getAktuellerSpieler().getRoute().getStaedte(), spielzug))
{
spielzug.getAktuellerSpieler().setAlleProvinzBP(alleProvinzenBP);
int p = spielzug.getAktuellerSpieler().getPunkte()
+alleProvinzenBP.getPunkte(spielzug.getPhase());
spielzug.getAktuellerSpieler().setPunkte(p);
}
}
public void kutscheAktualisieren() {
if(spielzug.getAktuellerSpieler().getKutsche().bedingungErfuellt(spielzug.getAktuellerSpieler().getRoute().getStaedte(), spielzug))
{
int p = spielzug.getAktuellerSpieler().getPunkte()
+ spielzug.getAktuellerSpieler().getKutsche().getPunkte(spielzug.getPhase());
spielzug.getAktuellerSpieler().setPunkte(p);
}
}
public void hauspunkteVergeben()
{
if(spielzug.getAktuellerSpieler().getHaeuser()
.bedingungErfuellt(spielzug.getAktuellerSpieler().getRoute().getStaedte(), spielzug))
{
int p = spielzug.getAktuellerSpieler().getPunkte()
+ spielzug.getAktuellerSpieler().getHaeuser().getPunkte(spielzug.getPhase());
spielzug.getAktuellerSpieler().setPunkte(p);
}
}
public Spielzug getSpielzug() {
return spielzug;
}
public void setSpielzug(Spielzug spielzug) {
this.spielzug = spielzug;
}
public ArrayList<Spieler> getSpieler() {
return spieler;
}
public void setSpieler(ArrayList<Spieler> spieler) {
this.spieler = spieler;
}
public Map getMap() {
return map;
}
public void setMap(Map map) {
this.map = map;
}
public Deck getDeck() {
return deck;
}
public void setDeck(Deck deck) {
this.deck = deck;
}
public Ablage getAblage() {
return ablage;
}
public void setAblage(Ablage ablage) {
this.ablage = ablage;
}
public OffeneKarten getOffeneKarten() {
return offeneKarten;
}
public void setOffeneKarten(OffeneKarten offeneKarten) {
this.offeneKarten = offeneKarten;
}
public ArrayList<RoutenBP> getRoutenBP() {
return routenBP;
}
public ArrayList<StadtBP> getStadtBP() {
return stadtBP;
}
public AlleProvinzenBP getAlleProvinzenBP() {
return alleProvinzenBP;
}}