JavaFx:多个控制器

时间:2016-09-27 14:31:48

标签: javafx controllers

我正在处理包含多个控制器的项目(每个Fxml文件有1个主控制器和2个控制器)。不幸的是,在运行程序时,控制台会向我抛出NullPointerExeption。我发现这是主控制器故障,但仍然有这些信息,我无法解决这个问题。你能给我一些如何解决这个问题的提示吗? 在这里,我得到了完整的曲目:

MainController类:

public class MainController {
  @FXML LogInController logInController;
  DBConnect dbConnect;
  @FXML FlightControlController flightControlController;

  @FXML public void initialize() {
    logInController.initialize(this);
    flightControlController.initialize(this);
    dbConnect.initialize(this);
  }
}

DBConnect类:

public void dbConnect() throws SQLException {
  try {
    Conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/nasa", "root", "1234");
  } catch(Exception e) {
    System.out.println(e.getStackTrace());
  }
}

public boolean isCorrect(String login,String password) throws SQLException, IOException {
  Stmt = Conn.createStatement();
  Rs = Stmt.executeQuery("SELECT * FROM Users WHERE login='"+login+"'AND password='"+password+"';");
  if(Rs.next()) {
    return true; 
  } else {
    return false;
  }
}

public void initialize(MainController mainController) {
  this.mainController=mainController;
}

LogInController类:

MainController mainController;
@FXML DBConnect dbConnect;
@FXML TextField logginField = null;
@FXML PasswordField passwordFiled=null;
@FXML Button logInButton;

@FXML
public void buttonClicked(ActionEvent event) throws SQLException, IOException {
  mainController.dbConnect.dbConnect();
  if(mainController.dbConnect.isCorrect(logginField.getText(),passwordFiled.getText())) {
    Parent root = FXMLLoader.load(getClass().getResource("/view/FlightControlView.fxml"));
    Scene scene = new Scene(root);
    Stage stage = (Stage) ((Node) event.getSource()).getScene().getWindow();
    stage.setScene(scene);
    stage.show();
  } else {
    System.out.print("An error have occured");
  }
}

public void initialize(MainController mainController) {
  this.mainController=mainController;
}

FlightControlController类:

@FXML Label label;
MainController mainController;

public void initialize(MainController mainController) {
  this.mainController = mainController;
}

发生错误:

  

引起:java.lang.NullPointerException at   controller.LogInController.buttonClicked(LogInController.java:31)...   62更多

我不确定,但MainController(没有自己的Fxml文件)是否可能使FXMLLoader不初始化MainController的属性?

@EDIT

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

<?import javafx.scene.text.*?>
<?import javafx.scene.control.*?>
<?import java.lang.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.layout.AnchorPane?>

<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="693.0" prefWidth="1062.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="controller.LogInController">
   <children>
      <SplitPane dividerPositions="0.21320754716981133" layoutX="331.0" layoutY="220.0" prefHeight="693.0" prefWidth="1062.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
        <items>
         <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="160.0" prefWidth="100.0">
           <children>
                  <Label alignment="CENTER" layoutY="-1.0" maxHeight="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="70.0" prefWidth="222.0" text="NASA DATABASE" />
                  <TextField fx:id="logginField" layoutX="18.0" layoutY="101.0" promptText="Login" />
                  <PasswordField fx:id="passwordFiled" layoutX="18.0" layoutY="165.0" promptText="Password" />
              <Button fx:id="logInButton" onAction="#buttonClicked" layoutX="79.0" layoutY="230.0" mnemonicParsing="false" text="Log In" />
           </children>
        </AnchorPane>
      <AnchorPane prefHeight="691.0" prefWidth="493.0" SplitPane.resizableWithParent="false">
           <children>
              <Label alignment="CENTER" layoutX="97.0" layoutY="104.0" prefHeight="417.0" prefWidth="635.0" text="NOT AVAILABLE, PLEASE LOG IN" AnchorPane.leftAnchor="113.0" AnchorPane.rightAnchor="113.0">
                 <font>
                    <Font name="System Bold Italic" size="37.0" />
                 </font>
              </Label>
           </children>
        </AnchorPane>
    </items>
  </SplitPane>
   </children>
</AnchorPane>

0 个答案:

没有答案