2016-11-17 15 views
0

先週、私はステージ/シーンの切り替えに関する質問を投稿し、誰かがMVCフレームワークを読んだことをお伝えします。私はそれをして、私のアプリケーションの変換を開始し、シーンを変更しようとするとエラーが発生します。スレッドJavaFXアプリケーションスレッドの例外キャストできません

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) 

それが参照している行は、ここで

loader.<LoginPageController>getController(); 

である私は...

をやっているものです私はこのようなシーンを作成し、ログインページloginPage.javaあります

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(); 
    } 
} 

次に、私はLoginPageController.javaを持っており、パスワードの入力を確認して比較しますなぜ私は私がエラーを取得しています

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); 
     } 
    } 

...

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"); 
      } 
    } 
} 

そして、このような正確なシーンを開く必要LoginManager.java内のどのユーザがログインするに応じて:それは、このようなハッシュによ?私はそれに行く前に私はバックアップしていないために自分自身を蹴っています。しかし、すべての学習経験の一部です。

答えて

0
LoginPageController controller = loader.<LoginPageController>getController(); 

があるため型消去のバイトコードでこのような何かの同等に変換されます:

Object temp = loader.getController(); 
LoginPageController controller = (LoginPageController) temp; 

FXMLLoaderによって作成されたコントローラタイプがLoginPageControllerClassCastExceptionが起こるに代入されていない場合。

LaserControllerAdminUi.fxmlfx:controller属性の値がであり、com.WesternAdvance.Lasercontroller.LoginPageControllerでないためです。

関連する問題