Приложение JAVAFX закрывается - PullRequest
0 голосов
/ 23 мая 2018
package login;

public class loginAppController implements Initializable {

    loginModel loginModel = new loginModel();

    @FXML
    private JFXButton loginButton;
    @FXML
    private Label dbStatus;
    @FXML
    private JFXTextField email;
    @FXML
    private JFXPasswordField password;
    @FXML
    private JFXComboBox<option> combobox;
    @FXML
    public Label loginStatus;


    @FXML
    public void initialize(URL location, ResourceBundle resources) {
        if(this.loginModel.isDatabaseConnected()) {
            this.dbStatus.setText("Connected To Database");
        } else {
            this.dbStatus.setText("Not Connected To Database");
        }

        this.combobox.setItems(FXCollections.observableArrayList(option.values()));
    }

    @FXML
    public void Login(ActionEvent event) throws Exception {
        try {
            if (this.loginModel.isLogin(this.email.getText(), this.password.getText(), ((option) this.combobox.getValue()).toString())) {
                Stage stage = (Stage) this.loginButton.getScene().getWindow();
                stage.close();
                switch (((option) this.combobox.getValue()).toString()) {
                    case "Admin":
                        adminLogin();
                        break;
                    case "Student":
                        studentLogin();
                        break;
                }
            } else {
                this.loginStatus.setText("Wrong Data");
            }
        } catch (Exception localException) {
        }
    }



    public void studentLogin() {
        try {
            Stage userStage = new Stage();
            FXMLLoader loader = new FXMLLoader();
            Pane root = (Pane) loader.load(getClass().getResource("/Users/Alar/Desktop/SMS/src/main/resources/students/studentFXML.fxml").openStream());
            StudentsController studentsController = (StudentsController) loader.getController();

            Scene scene = new Scene(root);
            userStage.setScene(scene);
            userStage.setTitle("Student Dashboard");
            userStage.setResizable(false);
            userStage.show();
        } catch (IOException e) {
            e.printStackTrace();
        }


    }

    public void adminLogin() {
        try {
            Stage adminStage = new Stage();
            FXMLLoader adminLoader = new FXMLLoader();
            Pane adminroot = (Pane) adminLoader.load(getClass().getResource("/Users/Alar/Desktop/SMS/src/main/resources/Admin/Admin.fxml").openStream());
            AdminController adminController = (AdminController) adminLoader.getController();

            Scene adminscene = new Scene(adminroot);

            adminStage.setScene(adminscene);
            adminStage.setTitle("Admin Dashboard");
            adminStage.setResizable(true);
            adminStage.show();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Когда я ввожу данные для входа в систему, я отлаживаю их, и приложение переходит с

Pane adminroot = (Pane) adminLoader.load(getClass().getResource("/Users/Alar/Desktop/SMS/src/main/resources/Admin/Admin.fxml").openStream());

на

catch (Exception localException) { }

, и оно не открывает новое окно.То же самое происходит для studentLogin().

Любая помощь будет очень ценится

Спасибо

Ответы [ 2 ]

0 голосов
/ 23 мая 2018

getResource параметр - это путь в пути к классам.Если вы используете jar, он совпадает с именем записи данных ресурса в файле jar.Однако вы используете путь к файлу.

Кроме того, лучше использовать URL-адрес в качестве местоположения для загрузки fxml, поскольку это позволяет вам использовать ресурсы относительно местоположения документа ( значения атрибута с префиксом @).

FXMLLoader adminLoader = new FXMLLoader(getClass().getResource("/Admin/Admin.fxml"));
Pane adminroot = (Pane) adminLoader.load();

Если путь в приведенном выше фрагменте не работает, настройте путь в соответствии с расположением ресурса относительно корня пути к классам.

0 голосов
/ 23 мая 2018

Я думаю, ваш путь неверен, попробуйте изменить вашу строку на:

public void adminLogin(){
        try {
            Stage adminStage = new Stage();
            FXMLLoader adminLoader = new FXMLLoader();
            Pane adminroot = (Pane)adminLoader.load(getClass().getResource("/Admin/Admin.fxml").openStream());
            AdminController adminController = (AdminController)adminLoader.getController();

            Scene adminscene = new Scene(adminroot);

            adminStage.setScene(adminscene);
            adminStage.setTitle("Admin Dashboard");
            adminStage.setResizable(true);
            adminStage.show();



        }catch (IOException e){
            e.printStackTrace();


        }

}
...