JavaFX在某些情况下崩溃(位于JavaFX.fxml.fxmloader.constructLoadException(fxmloader.java:2601)

JavaFX在某些情况下崩溃(位于JavaFX.fxml.fxmloader.constructLoadException(fxmloader.java:2601),java,javafx,Java,Javafx,我有一个登录表单,我在其中添加了注册按钮注册。在我决定向注册表添加按钮操作事件之前,它运行良好,该事件将返回到登录表单。如果我的注册表没有此功能,它将正常工作-打开。但当我添加返回功能时,我有一个此类错误: WARNING: Loading FXML document with JavaFX API of version 11.0.1 by JavaFX runtime of version 8.0.221 javafx.fxml.LoadException: /C:/Users/Greddy

我有一个登录表单,我在其中添加了注册按钮注册。在我决定向注册表添加按钮操作事件之前,它运行良好,该事件将返回到登录表单。如果我的注册表没有此功能,它将正常工作-打开。但当我添加返回功能时,我有一个此类错误:

WARNING: Loading FXML document with JavaFX API of version 11.0.1 by JavaFX runtime of version 8.0.221
javafx.fxml.LoadException: 
/C:/Users/Greddy/Exercism/java/SchoolSystem/out/production/SchoolSystem/loginApp/register.fxml

    at javafx.fxml.FXMLLoader.constructLoadException(FXMLLoader.java:2601)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2579)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2441)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3214)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3175)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3148)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3124)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3104)
    at javafx.fxml.FXMLLoader.load(FXMLLoader.java:3097)
    at loginApp.loginController.register(loginController.java:94)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at sun.reflect.misc.Trampoline.invoke(MethodUtil.java:71)
    at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:275)
    at javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1769)
    at javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(FXMLLoader.java:1657)
    at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
    at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
    at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:49)
    at javafx.event.Event.fireEvent(Event.java:198)
    at javafx.scene.Node.fireEvent(Node.java:8411)
    at javafx.scene.control.Button.fire(Button.java:185)
    at com.sun.javafx.scene.control.behavior.ButtonBehavior.mouseReleased(ButtonBehavior.java:182)
    at com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.handle(BehaviorSkinBase.java:96)
    at com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.handle(BehaviorSkinBase.java:89)
    at com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:218)
    at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80)
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
    at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
    at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
    at javafx.event.Event.fireEvent(Event.java:198)
    at javafx.scene.Scene$MouseHandler.process(Scene.java:3757)
    at javafx.scene.Scene$MouseHandler.access$1500(Scene.java:3485)
    at javafx.scene.Scene.impl_processMouseEvent(Scene.java:1762)
    at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2494)
    at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:394)
    at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:295)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$2(GlassViewEventHandler.java:432)
    at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:410)
    at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:431)
    at com.sun.glass.ui.View.handleMouseEvent(View.java:555)
    at com.sun.glass.ui.View.notifyMouse(View.java:937)
    at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
    at com.sun.glass.ui.win.WinApplication.lambda$null$3(WinApplication.java:177)
    at java.lang.Thread.run(Thread.java:748)
`Caused by: java.lang.NullPointerException
    at loginApp.loginController.initialize(loginController.java:57)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2548)
    ... 66 more
Process finished with exit code 0
My register.fxml文件:

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.PasswordField?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.text.Font?>

<AnchorPane prefHeight="278.0" prefWidth="365.0" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="loginApp.loginController">
    <children>
        <Label layoutX="110.0" layoutY="6.0" prefHeight="41.0" prefWidth="227.0" text="Registration Form ">
            <font>
                <Font size="23.0" />
            </font>
        </Label>
        <Label layoutX="34.0" layoutY="60.0" text="User name" />
        <Label layoutX="37.0" layoutY="93.0" text="Password" />
        <Label layoutX="34.0" layoutY="131.0" text="Confirm Password" />
        <Label layoutX="48.0" layoutY="170.0" text="Email" />
        <TextField fx:id="regusername" layoutX="158.0" layoutY="56.0" promptText="Enter username" />
        <PasswordField fx:id="regpassword" layoutX="158.0" layoutY="89.0" promptText="Enter your password" />
        <PasswordField fx:id="regconfirmpassword" layoutX="158.0" layoutY="127.0" promptText="Confirm your password" />
        <TextField fx:id="regEmail" layoutX="158.0" layoutY="166.0" promptText="Enter your email" />
        <Button fx:id="backToLogin" layoutX="210.0" layoutY="214.0" mnemonicParsing="false" onAction="#backToLoginF" text="Back to Login" />
    </children>
</AnchorPane>
控制器文件中的我的登录控制器:

package loginApp;

import admin.AdminController;
import javafx.collections.FXCollections;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.scene.Node;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.layout.Pane;
import javafx.stage.Stage;
import students.StudentsController;

import java.io.IOException;
import java.net.URL;
import java.util.ResourceBundle;

public class loginController implements Initializable {



    LoginModel loginModel = new LoginModel();

    @FXML
    private Label dbstatus;
    @FXML
    private TextField username;
    @FXML
    private PasswordField password;
    @FXML
    private ComboBox<option> combobox;
    @FXML
    private javafx.scene.control.Button loginButton;
    @FXML
    private Label loginStatus;
    @FXML
    private Button backToLogin;
    @FXML
    private TextField regusername;
    @FXML
    private PasswordField regpassword;
    @FXML
    private PasswordField regconfirmpassword;
    @FXML
    private TextField regEmail;
    @FXML
    private Button registerButton;



    public void initialize (URL url, ResourceBundle rb){

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



    //login to application
    public void Login(ActionEvent event){
        try {
            if (this.loginModel.isLogin(this.username.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 credentials");
            }
        }catch (Exception localException) {

        }
    }

    public void register(ActionEvent event) {
        try {
            // we are in controller folder, but our view is not here, so we need to go one step up - ../

            Parent root = FXMLLoader.load(getClass().getResource("/loginApp/register.fxml"));
            Stage stage = new Stage();
            stage.setTitle("Register");
            stage.setScene(new Scene(root, 400, 280));
            stage.setResizable(false);
            stage.show();
            ((Node) (event.getSource())).getScene().getWindow().hide();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void backToLoginF(ActionEvent event) throws IOException {

        Parent root = FXMLLoader.load(getClass().getResource("/loginApp/login.fxml"));
        Stage stage = new Stage();
        stage.setTitle("Login");
        stage.setScene(new Scene(root, 450, 350));
        stage.show();
        ((Node) (event.getSource())).getScene().getWindow().hide();

    }
    //login with studentlogin
    public void studentLogin() throws IOException {
        try {
            Stage userStage = new Stage ();
            FXMLLoader loader = new FXMLLoader();
            Pane root = (Pane)loader.load(getClass().getResource("/students/StudentsFXML.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 ex) {
            ex.printStackTrace();
        }
    }
    //login with adminLogin
    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 scene = new Scene(adminroot);
            adminStage.setScene(scene);
            adminStage.setTitle("Admin DashBoard");
            adminStage.setResizable(false);
            adminStage.show();
        } catch (IOException e){
            e.printStackTrace();
        }
    }

}
项目结构


我检查了按钮和文本字段,它们很好。我认为这与控制器和/或包路径或命名有关,但我找不到问题出在哪里。我为具有相同功能的测试创建了一个新项目,返回到第一个表单并正常工作。有什么建议吗?

dbStatus标签为空,它在f中不存在xml

Caused by: java.lang.NullPointerException
    at loginApp.loginController.initialize(loginController.java:57)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2548)
但在控制器中被映射

  @FXML
    private Label dbstatus;

发布完整的堆栈跟踪。应该有一系列由块引起的问题。您可能还需要发布控制器。您提供的堆栈跟踪部分不包括实际问题。正如James提到的,应该有一些包含重要信息的由块引起的问题。请参阅您的问题以添加完整堆栈trace和a。感谢您的建议-已编辑!请使用java命名约定!与@FXML private ComboBox ComboBox相同;好吧,login.FXML中有dbStatus。@Greddy a其他FXML的外观无关紧要;重要的是在本例中加载的FXML是register.FXML,而不是login.FXML和b dbStatus!=dbstatusorry,我不知道在哪里这是主要的问题。你能详细说明一下吗?