Hallo zusammen,
folgendes Szenario
Spieler 1:
Befindet sich im Hauptmenü (Stage1/Scene1). Über einen Button geht er in die neue Scene in der er ein Spiel hosten kann(Stage 1, Scene2). Wenn er die Spieleinstellungen getätigt hat und auf den Button "Spiel starten" drückt kommt er in den Warteraum(Stage 1/Scene4).
Spieler 2 bis n:
Befindet sich im Hauptmenü. Über einen Button geht er in die neue Scene wo er einen Spiel beitreten kann(Stage 1/Scene 3). Wenn er die Parameter(IP,Passwort) eingegeben hat und auf den Button "Beitreten" drückt, soll er in den Warteraum kommen, der vorher von Spieler 1 erzeugt wurde.
Der Ansatz war:
- In der Klasse "SpielHosten" haben wir den Warteraum mit "new" erzeugt und benötigte Parameter übergeben
- in der Klasse "SpielBeitreten" habe wir mit
ein Objekt angelegt. Diesen wurde über getter-methode die Parameter vom vorher erzeugten Warteraum zugeteilt. Und in der Erstellung der Scene wurde dieses Objekt
angegeben.
Hier kommt aber immer eine Nullpointer Exception. Wir sind mittlerweile Ratlos was man noch machen kann.
Hier nochmal die Klassen(allerdings schon wieder auf Ausgangszustand geändert ohne die getMethoden)
Warteraum wird erzeugt aus der Klasse "SpielHosten"
Warteraum "Erzeugung" aus der Klasse "SpielBeitreten"
Klasse AnsichtWarteraumController
Fals der Code nicht ausreichen, kann ich gerne auch den kompletten Code der 3 Klassen posten.
Danke schon einmal für eure Hilfe.
VG Marco
folgendes Szenario
Spieler 1:
Befindet sich im Hauptmenü (Stage1/Scene1). Über einen Button geht er in die neue Scene in der er ein Spiel hosten kann(Stage 1, Scene2). Wenn er die Spieleinstellungen getätigt hat und auf den Button "Spiel starten" drückt kommt er in den Warteraum(Stage 1/Scene4).
Spieler 2 bis n:
Befindet sich im Hauptmenü. Über einen Button geht er in die neue Scene wo er einen Spiel beitreten kann(Stage 1/Scene 3). Wenn er die Parameter(IP,Passwort) eingegeben hat und auf den Button "Beitreten" drückt, soll er in den Warteraum kommen, der vorher von Spieler 1 erzeugt wurde.
Der Ansatz war:
- In der Klasse "SpielHosten" haben wir den Warteraum mit "new" erzeugt und benötigte Parameter übergeben
- in der Klasse "SpielBeitreten" habe wir mit
Java:
private AnsichtWarteraumController warteraumController
Java:
warteraumController
Hier kommt aber immer eine Nullpointer Exception. Wir sind mittlerweile Ratlos was man noch machen kann.
Hier nochmal die Klassen(allerdings schon wieder auf Ausgangszustand geändert ohne die getMethoden)
Warteraum wird erzeugt aus der Klasse "SpielHosten"
Java:
/*
* Erzeugen Warteraum
*/
FXMLLoader loader = [B]new[/B] FXMLLoader(getClass().getResource("/monopoly/ansicht/warteraum/AnsichtWarteraum.fxml"));
loader.setControllerFactory(factory -> ansichtWarteraumController = [B]new[/B]
AnsichtWarteraumController(model,spielLogik,dataTransfer,bgm));
Parent root = loader.load();
Scene WarteraumScene = [B]new[/B] Scene(root);
Stage stage = (Stage) ((Node) event.getSource()).getScene().getWindow();
stage.setScene(WarteraumScene);
stage.setFullScreen([B]true[/B]);
stage.show();
}
Warteraum "Erzeugung" aus der Klasse "SpielBeitreten"
Java:
FXMLLoader loader = [B]new[/B] FXMLLoader(getClass().getResource("/monopoly/ansicht/warteraum/AnsichtWarteraum.fxml"));
loader.setControllerFactory(factory -> //warteraumcontroller muss hier rein );
Parent root = loader.load();
Scene WarteraumScene = [B]new[/B] Scene(root);
Stage stage = (Stage) ((Node) event.getSource()).getScene().getWindow();
stage.setScene(WarteraumScene);
stage.setFullScreen([B]true[/B]);
stage.show();
}
Klasse AnsichtWarteraumController
Java:
package monopoly.ansicht.warteraum;
import java.io.IOException;
import java.net.InetAddress;
import java.net.URL;
import java.net.UnknownHostException;
import java.util.ResourceBundle;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.Node;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.ListView;
import javafx.stage.Stage;
import javafx.scene.text.Text;
import monopoly.ansicht.hauptmenue.AnsichtHauptmenueController;
import monopoly.ansicht.spielumgebung.AnsichtSpielumgebungController;
import monopoly.code.backgroundmusic.BackgroundMusic;
import monopoly.code.model.Model;
import monopoly.code.netzwerk.*;
import monopoly.code.spieler.Spieler;
import monopoly.code.spiellogik.Spiellogik;
[B]public[/B] [B]class[/B] AnsichtWarteraumController {
@FXML
[B]private[/B] ResourceBundle resources;
@FXML
[B]private[/B] URL location;
@FXML
ListView<Spieler> listViewSpieler;
@FXML
[B]private[/B] Button butSpielStarten;
@FXML
[B]private[/B] Button butZurueck;
@FXML
[B]private[/B] Text ipText;
[B]private[/B] [B]final[/B] Model model;
[B]private[/B] Spiellogik spielLogik;
[B]private[/B] Datatransfer dataTransfer;
[B]private[/B] BackgroundMusic bgm;
[B]public[/B] AnsichtWarteraumController(Model model, Spiellogik spielLogik,Datatransfer dataTransfer, BackgroundMusic bgm) {
[B]this[/B].model = model;
[B]this[/B].spielLogik = spielLogik;
[B]this[/B].dataTransfer = dataTransfer;
[B]this[/B].bgm = bgm;
}
@FXML
[B]void[/B] clickButSpielStarten(ActionEvent event) [B]throws[/B] Exception {
FXMLLoader loader = [B]new[/B] FXMLLoader(getClass().getResource("/monopoly/ansicht/spielumgebung/AnsichtSpielumgebung.fxml"));
loader.setControllerFactory(factory -> [B]new[/B] AnsichtSpielumgebungController(spielLogik,dataTransfer,bgm));
Parent page = loader.load();
Scene spielUmgebungsScene = [B]new[/B] Scene(page);
Stage stage = (Stage) ((Node) event.getSource()).getScene().getWindow();
stage.setScene(spielUmgebungsScene);
stage.setFullScreen([B]true[/B]);
stage.show();
}
@FXML
[B]void[/B] clickButZurueck(ActionEvent event) [B]throws[/B] IOException {
model.ovLeeren();
FXMLLoader loader = [B]new[/B] FXMLLoader(getClass().getResource("/monopoly/ansicht/hauptmenue/AnsichtHauptmenue.fxml"));
loader.setControllerFactory(factory -> [B]new[/B] AnsichtHauptmenueController(model));
Parent page = loader.load();
Scene HauptmenueScene = [B]new[/B] Scene(page);
Stage stage = (Stage) ((Node) event.getSource()).getScene().getWindow();
stage.setScene(HauptmenueScene);
stage.setFullScreen([B]true[/B]);
stage.show();
}
@FXML
[B]void[/B] initialize() [B]throws[/B] UnknownHostException {
[B]assert[/B] listViewSpieler != [B]null[/B] : "fx:id=\"listViewSpieler\" was not injected: check your FXML file 'AnsichtWarteraum.fxml'.";
[B]assert[/B] butSpielStarten != [B]null[/B] : "fx:id=\"butSpielStarten\" was not injected: check your FXML file 'AnsichtWarteraum.fxml'.";
[B]assert[/B] butZurueck != [B]null[/B] : "fx:id=\"butZurueck\" was not injected: check your FXML file 'AnsichtWarteraum.fxml'.";
[B]assert[/B] ipText != [B]null[/B] : "fx:id=\"ipText\" was not injected: check your FXML file 'AnsichtWarteraum.fxml'.";
listViewSpieler.setItems(model.getOvList());
InetAddress ip = InetAddress.[I]getLocalHost[/I] ();
ipText.setText("Deine IP-Adresse: "+ip.getHostAddress());
}
}
Fals der Code nicht ausreichen, kann ich gerne auch den kompletten Code der 3 Klassen posten.
Danke schon einmal für eure Hilfe.
VG Marco