Letzte Woche habe ich eine Frage zum Wechseln von Phasen/Szenen gestellt und jemand schlägt vor, dass ich mich über MVC Framework erkundige. Ich habe das gemacht und habe angefangen, meine Anwendung zu konvertieren, und ich bekomme jetzt einen Fehler, wenn ich versuche, die Szene zu ändern.Ausnahme im Thread JavaFX-Anwendungsthread Kann nicht umgewandelt werden
Exception in thread "JavaFX Application Thread" java.lang.ClassCastException: com.WesternAdvance.Lasercontroller.LaserControllerUI cannot be cast to com.WesternAdvance.Lasercontroller.LoginPageController
at com.WesternAdvance.Lasercontroller.LoginManager.showMainViewAdmin(LoginManager.java:60)
Die Linie es sich bezieht ist
loader.<LoginPageController>getController();
Hier ist, was ich tue ...
ich eine Login-Seite loginPage.java
haben, die eine Szene wie diese erzeugt:
public class LoginPage extends Application {
public static void main(String[] args) { launch(args); }
@Override public void start(Stage stage) throws IOException {
Scene scene = new Scene(new StackPane());
LoginManager loginManager = new LoginManager(scene);
loginManager.showLoginScreen();
stage.setScene(scene);
stage.show();
stage.setTitle("Laser Controller");
stage.setOnCloseRequest(e -> System.exit(1));
stage.setX(0);
stage.setY(0);
stage.sizeToScene();
}
}
Dann habe ich eine LoginPageController.java
, die die Passworteingabe überprüft und vergleicht s es auf einen Hash wie folgt aus:
public void initManager(final LoginManager loginManager) {
login.setOnAction(new EventHandler<ActionEvent>() {
@Override public void handle(ActionEvent event) {
String passwordhashadmin = "$2a$08$WV7EDELlZbLHqrcW5qpuSuc6Bk8PkpvttIqeBi1n0EwP.yLt.tg2K";
String passwordhashuser = "$2a$08$2eS3Mukla5T.rCC747/hj.FGrP2GHSWCgloP4ZBVuTROYIQWwo6lm";
if (BCrypt.checkpw(userId.getText() + passwordfield.getText(), passwordhashuser))
{
loginManager.showMainViewUser();//Login as User
}
else if (BCrypt.checkpw(userId.getText() + passwordfield.getText(), passwordhashadmin))
{
loginManager.showMainViewAdmin();
}
else{
errorMessage.setText("Login Incorrect!");
System.out.print("false");
}
}
}
Und je danach, auf dem Benutzer anmeldet LoginManager.java
sollte die richtige Szene wie diese öffnen ...
void showMainViewUser() {
try {
FXMLLoader loader = new FXMLLoader(
getClass().getResource("LaserControllerUserUi.fxml")
);
scene.setRoot((Parent) loader.load());
LoginPageController controller =
loader.<LoginPageController>getController();
controller.initManager(this);
scene.getStylesheets().add(LaserControllerUI.class.getResource("LaserControllerUI.css").toExternalForm());
} catch (IOException ex) {
Logger.getLogger(LoginManager.class.getName()).log(Level.SEVERE, null, ex);
}
}
void showMainViewAdmin() {
try {
FXMLLoader loader = new FXMLLoader(
getClass().getResource("LaserControllerAdminUi.fxml")
);
scene.setRoot((Parent) loader.load());
LoginPageController controller =
loader.<LoginPageController>getController();
controller.initManager(this);
scene.getStylesheets().add(LaserControllerUI.class.getResource("LaserControllerUI.css").toExternalForm());
} catch (IOException ex) {
Logger.getLogger(LoginManager.class.getName()).log(Level.SEVERE, null, ex);
}
}
Warum bin ich die Fehlermeldung bekommen, dass ich bin ? Ich trete mich selbst dafür, dass ich nicht zurückgehe, bevor ich daran gegangen bin. aber alles Teil der Lernerfahrung.