Hallöle ihr Leute,
ich habe nochmal eine Frage zu dem Reader, der mir alles einliest. Da läuft irgendwie was nicht so, wie es sein soll.
Ich habe neuerdings alles in Methoden und Klassen ausgelagert, also zumindest einen relevanten Teil ausgelagert. Klappt auch alles soweit.
Hier mal ein Ausschnitt aus meiner Unterklasse Spielstart.java
.
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
import java.util.Collections;
import java.util.Properties;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import spiel.Gastkarte.Geschlecht;
import spiel.Gastkarte.Land;
public class Spielstart extends CafeRoot{
private static final long serialVersionUID = 4759436681262448461L;
public Spielstart() throws IOException{
super(spielname);
}
public static void neuesspiel() throws IOException{
Reader reader = new BufferedReader(new FileReader("neuesspiel.txt"));
Properties neuesspiel = new Properties();
try {
neuesspiel.load(reader);
}catch(FileNotFoundException ex){
ex.printStackTrace();
System.out.println("Die Datei neuesspiel.txt existiert nicht!");
}
reader.close();
String string_restkartentisch = neuesspiel.getProperty("restkartentisch", "24");
restkartentisch = Integer.parseInt(string_restkartentisch);
jLabelRestkartenTisch.setText("Resttische: "+restkartentisch);
String string_restkartengast = neuesspiel.getProperty("restkartengast", "0");
restkartengast = Integer.parseInt(string_restkartengast);
jLabelRestkartenGast.setText("Restgäste: "+restkartengast);
String string_restbarplaetze = neuesspiel.getProperty("restbarplaetze", "21");
restbarplaetze = Integer.parseInt(string_restbarplaetze);
jLabelRestbarplaetze.setText("Barplätze übrig: "+restbarplaetze);
String string_handkartenspieler1 = neuesspiel.getProperty("handkartenspieler1", "0");
handkartenspieler1 = Integer.parseInt(string_handkartenspieler1);
jLabelHandkartenSpieler1.setText("Karten "+spielername1+": "+handkartenspieler1);
String string_handkartenspieler2 = neuesspiel.getProperty("handkartenspieler2", "0");
handkartenspieler2 = Integer.parseInt(string_handkartenspieler2);
jLabelHandkartenSpieler2.setText("Karten "+spielername2+": "+handkartenspieler2);
String string_punktespieler1 = neuesspiel.getProperty("punktespieler1", "0");
punktespieler1 = Integer.parseInt(string_punktespieler1);
jLabelPunkteSpieler1.setText("Punkte "+spielername1+": "+punktespieler1);
String string_punktespieler2 = neuesspiel.getProperty("punktespieler2", "0");
punktespieler2 = Integer.parseInt(string_punktespieler2);
jLabelPunkteSpieler2.setText("Punkte "+spielername2+": "+punktespieler2);
String string_spieler = neuesspiel.getProperty("spieler", "1");
spieler = Integer.parseInt(string_spieler);
if(spieler == 1){
jLabelSpieler.setText("Am Zug: "+spielername1);
}
else{
jLabelSpieler.setText("Am Zug: "+spielername2);
}
System.out.println("Neues Spiel gestartet");
}
public static void spielstand() throws IOException{
Reader reader2 = new BufferedReader(new FileReader("spielstand.txt"));
Properties spielstand = new Properties();
try {
spielstand.load(reader2);
}catch(FileNotFoundException ex){
ex.printStackTrace();
System.out.println("Die Datei spielstand.txt existiert nicht!");
}
reader2.close();
JOptionPane.showMessageDialog(null, "Ein Zwischengespeichertes Spiel wird wiederhergestellt!", "Weiterspielen", JOptionPane.INFORMATION_MESSAGE);
String spielername1 = spielstand.getProperty("spielername1", "Nicht vorhanden");
String spielername2 = spielstand.getProperty("spielername2", "Nicht vorhanden");
String string_restkartentisch = spielstand.getProperty("restkartentisch", "0");
restkartentisch = Integer.parseInt(string_restkartentisch);
jLabelRestkartenTisch.setText("Resttische: "+restkartentisch);
String string_restkartengast = spielstand.getProperty("restkartengast", "0");
restkartengast = Integer.parseInt(string_restkartengast);
jLabelRestkartenGast.setText("Restgäste: "+restkartengast);
String string_restbarplaetze = spielstand.getProperty("restbarplaetze", "21");
restbarplaetze = Integer.parseInt(string_restbarplaetze);
jLabelRestbarplaetze.setText("Barplätze übrig: "+restbarplaetze);
String string_handkartenspieler1 = spielstand.getProperty("handkartenspieler1", "0");
handkartenspieler1 = Integer.parseInt(string_handkartenspieler1);
jLabelHandkartenSpieler1.setText("Karten "+spielername1+": "+handkartenspieler1);
String string_handkartenspieler2 = spielstand.getProperty("handkartenspieler2", "0");
handkartenspieler2 = Integer.parseInt(string_handkartenspieler2);
jLabelHandkartenSpieler2.setText("Karten "+spielername2+": "+handkartenspieler2);
String string_punktespieler1 = spielstand.getProperty("punktespieler1", "0");
punktespieler1 = Integer.parseInt(string_punktespieler1);
jLabelPunkteSpieler1.setText("Punkte "+spielername1+": "+punktespieler1);
String string_punktespieler2 = spielstand.getProperty("punktespieler2", "0");
punktespieler2 = Integer.parseInt(string_punktespieler2);
jLabelPunkteSpieler2.setText("Punkte "+spielername2+": "+punktespieler2);
String string_spieler = spielstand.getProperty("spieler", "1");
spieler = Integer.parseInt(string_spieler);
if(spieler == 1){
jLabelSpieler.setText("Am Zug: "+spielername1);
}
else{
jLabelSpieler.setText("Am Zug: "+spielername2);
}
gastkarten.clear();
jListGastkartenModel.clear();
for (int n=0;n<restkartengast;n++) {
String gastkartewiederhergestellt = spielstand.getProperty("gastkarten" + n);
String[] einzelkarte = gastkartewiederhergestellt.split(":");
Geschlecht geschlecht = Geschlecht.valueOf(einzelkarte[1]);
Land land = Land.valueOf(einzelkarte[0]);
gastkarten.add(new Gastkarte(geschlecht, land));
jListGastkartenModel.addElement(gastkarten.get(n));
}
System.out.println("Ein altes Spiel wurde wiederhergestellt");
System.out.println(gastkarten);
}
public static void namensfrage() {
JTextField spielername01 = new JTextField(new MaxSizeDocument(12), "", 0);
JTextField spielername02 = new JTextField(new MaxSizeDocument(12), "", 0);
Object[] namensfrage = {"Name von Spieler 1", spielername01, "Name von Spieler 2", spielername02};
JOptionPane pane = new JOptionPane(namensfrage, JOptionPane.PLAIN_MESSAGE, JOptionPane.DEFAULT_OPTION);
pane.createDialog(null, "Wie heißen die Spieler?").setVisible(true);
spielername1 = spielername01.getText();
spielername2 = spielername02.getText();
if(spielername1.equals("") || spielername2.equals("")) {
JOptionPane.showMessageDialog(null, "Bitte gib beide Spielernamen ein!", "Unvollständige Eingabe", JOptionPane.ERROR_MESSAGE);
System.out.println("Es wurden nicht alle Spielernamen eingetragen");
namensfrage();
}
else if(spielername1.equalsIgnoreCase(spielername2)) {
JOptionPane.showMessageDialog(null, "Bitte benenne die Spieler unterschiedlich!", "Namensgleichheit", JOptionPane.ERROR_MESSAGE);
System.out.println("Es wurde bei beiden Namen \""+spielername1+"\" eingetragen");
namensfrage();
}
else{
spielernamenkorrekt = true;
}
}
public static void gastkartenmischen() {
for(int j=0;j<2;j++){
for(Land land : Land.values()) {
int anzahl = 2;
if (land == Land.Joker) {
anzahl = 1;
}
for(int i = 0; i < anzahl; i++) {
for(Geschlecht geschlecht : Geschlecht.values()) {
gastkarten.add(new Gastkarte(geschlecht, land));
restkartengast = restkartengast + 1;
}
}
}
}
/*Gastkarte eineGastkarte = gastkarten.get(0);
Geschlecht geschlecht = eineGastkarte.geschlecht;
Land land = eineGastkarte.land;
if(land == Land.Chinese) {
System.out.println("Nihao!");
}*/
jLabelRestkartenGast.setText("Restgäste: "+restkartengast);
Collections.shuffle(gastkarten);
for(int n=0;n<gastkarten.size();n++){
jListGastkartenModel.addElement(gastkarten.get(n));
}
System.out.println("Die Gastkarten wurden gemischt");
System.out.println(gastkarten);
}
public static boolean isWindows() {
return (OS.indexOf("win") >= 0);
}
public static void reader1() throws IOException{
Reader reader = new BufferedReader(new FileReader("neuesspiel.txt"));
Properties neuesspiel = new Properties();
try {
neuesspiel.load(reader);
}catch(FileNotFoundException ex){
ex.printStackTrace();
System.out.println("Die Datei neuesspiel.txt existiert nicht!");
}
reader.close();
}
public static void reader2() throws IOException{
Reader reader2 = new BufferedReader(new FileReader("spielstand.txt"));
Properties spielstand = new Properties();
try {
spielstand.load(reader2);
}catch(FileNotFoundException ex){
ex.printStackTrace();
System.out.println("Die Datei spielstand.txt existiert nicht!");
}
reader2.close();
}
}```
Aber nun kommt da ein kleiner Fehler:
Ich habe, wie bereits erkannt die 2 Reader in zwei Methoden ausgelagert, weil ich die auch bis dato sicherlich 10 mal eingefügt habe und das mal in eine Methode rutschen sollte.
Siehe unten:
`reader1` & `reader2`
Nun das Problem:
Die Zeilen 27 bis 35 beispielsweise würde ich dann durch den Methodenaufruf ersetzen können.
Also habe ich `reader1();` hingeschrieben, wie ich auch alle anderen Methoden aufrufe. Aber das klappt nicht in der Form.
Wenn ich das tue, gibt es in den Zeilen danach lauter Fehler, dass Variablen nicht aufgelöst werden könnten.
```String string_restkartentisch = neuesspiel.getProperty("restkartentisch", "24");
restkartentisch = Integer.parseInt(string_restkartentisch);
jLabelRestkartenTisch.setText("Resttische: "+restkartentisch);
String string_restkartengast = neuesspiel.getProperty("restkartengast", "0");```
Explizit überall wo `neuesspiel.getProperty` steht, da kann er `neuesspiel` nicht auflösen.
Dieses ist aber in der Methode eigentlich so definiert.
Bis hierhin ist das Projekt gut vorangekommen und ich habe jetzt auch eine Menge Sachen allein zusammenbasteln können, ich lese ja nebenbei zu Java diverse Bücher. Aber das ist mir jetzt echt suspekt.
Kann mir das jemand erklären und korrigieren?
Schönen Samstag!
Lukas :)