这个标题非常简单。我想保存序列化的“spiel” 作为使用filechooser的“name.ser”文件。我还想加载文件并将其返回给我的控制器。我不知道如何连接objectoutputstream和filechooser。
public class Speicher {
public void spielstandSpeichern(Spiel spiel, String name) { // Save File
try{
FileChooser fs = new FileChooser();
fs.setInitialDirectory(new File("/Saves"));
fs.setTitle("Spiel speichern");
fs.getExtensionFilters().addAll(
new FileChooser.ExtensionFilter("Ser", ".ser")
);
//File file =
FileOutputStream fos = new FileOutputStream("Saves/save1.ser");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(spiel);
oos.close();
fos.close();
}
catch(IOException e) {
e.printStackTrace();
}
}
public Spiel spielstandLaden() { // Load File
Spiel spiel = null;
try{
FileInputStream fis = new FileInputStream("Saves/save1.ser");
ObjectInputStream ois = new ObjectInputStream(fis);
spiel = (Spiel) ois.readObject();
ois.close();
fis.close();
}
catch(ClassNotFoundException e) {
e.printStackTrace();
}
catch(IOException e) {
e.printStackTrace();
}
return spiel;
}
}
提前致谢:)
答案 0 :(得分:1)
您可以在FileChooser实例上分别使用showSaveDialog
showOpenDialog
来获取用于加载和保存的文件句柄对象。您可以在FileInputStream和FileOutputStream构造函数上使用此文件句柄对象。
答案 1 :(得分:0)
感谢您帮我解决这个问题:)我使用的是MVC架构。所以以下是我的班级" Spiel"。基本上是我模特的母亲。模型中的每个其他类都住在这里。 "高谈阔论"本身就是" Fassade"与#34; Speicher" (保存/加载Spiel的类),唯一不属于" Spiel"的模型类。
"高谈阔论"并且它下面的模型中的每个类都实现了Serializable。但是在某些类中,我在初始化它们时创建了新的Image()。加载已保存的" Spiel" JavaFX无法重新创建图像,因为它们未被序列化。
你知道如何解决这个问题,以便我可以保存/加载游戏吗?
public class Spiel implements Serializable {
// Attribute
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;
// Konstruktor
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();
}
// Methoden
// Initialisierung
private void bpInitialisieren()
{
//Routen BP initialisieren
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);
//Stadt BP initialisieren
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);
//Alle Provinzen BP initialisieren
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);
}
// Methoden
/**
* Nimmt den jetzigen Spieler entgegegen und uebergibt den naechsten.
*
* @param spieler der jetzt fertig ist
* @return spieler der jetzt dran ist
*/
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))
{
// gibt BP an Spieler
spielzug.getAktuellerSpieler().getRoutenBP().add(rbp);
// gibt Punkte für BP an Spieler
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))
{
// gibt BP an Spieler
spielzug.getAktuellerSpieler().getStadtBP().add(sbp);
// gibt Punkte für BP an Spieler
int p = spielzug.getAktuellerSpieler().getPunkte()
+sbp.getPunkte(spielzug.getPhase());
spielzug.getAktuellerSpieler().setPunkte(p);
}
}
if(alleProvinzenBP.bedingungErfuellt(spielzug.getAktuellerSpieler().getRoute().getStaedte(), spielzug))
{
// gibt BP an Spieler
spielzug.getAktuellerSpieler().setAlleProvinzBP(alleProvinzenBP);
// gibt Punkte für BP an Spieler
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);
}
}
// Setter und Getter FUnktionen
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;
}}