将参数从一个控制器传递到另一个控制器会产生java.lang.NullPointerException

将参数从一个控制器传递到另一个控制器会产生java.lang.NullPointerException,java,mysql,sql,javafx,fxml,Java,Mysql,Sql,Javafx,Fxml,我试图获取某人用于登录的用户名,然后在某人发出指令时将其插入数据库 这是“程序测试”表 这是帐户表,其中用户名保存为唯一 用户名的输入是通过文本字段从fxml获得的,在GetUsername方法中,我在下面指出了它 package LicentaApp; public class LogareController implements Initializable { public LoginVerifier loginVerifier = new LoginVerifier();

我试图获取某人用于登录的用户名,然后在某人发出指令时将其插入数据库

这是“程序测试”表

这是帐户表,其中用户名保存为唯一

用户名的输入是通过文本字段从fxml获得的,在GetUsername方法中,我在下面指出了它

package LicentaApp;



public class LogareController implements Initializable {
 public LoginVerifier loginVerifier = new LoginVerifier();





   @FXML
   private TextField Numeutilzator; Numeutilziator is the username that I am talking about

   @FXML
   private PasswordField Parola;

   @FXML
   private Label Stare;









 @Override
 public void initialize(URL location, ResourceBundle resources) {


  if (loginVerifier.Conexiune()) {
      Stare.setText("");
  } else {

      Stare.setText("Conexiune nereusita!");

  }

 }

 public void Autentificare (ActionEvent event) {
 try {
         if(loginVerifier.testaredate(Numeutilzator.getText(),     Parola.getText())) {
         Stare.setText("Autentificare reusita !");
         ((Node)event.getSource()).getScene().getWindow().hide();
            Stage StagePrincipala= new Stage();
            FXMLLoader incarcator= new FXMLLoader();
            Pane parinte = incarcator.load(getClass().getResource("/LicentaApp/Meniu.fxml").openStream());

            Scene scene = new Scene(parinte);
                scene.getStylesheets().add(getClass().getResource("Style1212.css").toExternalForm());
            StagePrincipala.setScene(scene);
            StagePrincipala.show();

          }
     else { 
         Stare.setText("Nume de utilizator sau parola incorect");

     }




} catch (SQLException e) {





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

    e.printStackTrace();
    }
 }
 @FXML
    public void Inregistrare(ActionEvent event) {
        try {
         ((Node)event.getSource()).getScene().getWindow().hide();
            Stage PS= new Stage();
            FXMLLoader incarcator= new FXMLLoader();
            Pane parinte = incarcator.load(getClass().getResource("/LicentaApp/InregistrareUser.fxml").openStream());
            Scene scena = new Scene(parinte);
            scena.getStylesheets().add(getClass().getResource("Style1212.css").toExternalForm());
            PS.setScene(scena);
            PS.show();
    } catch (Exception e) {

    }

*Here I m calling the function that I made in AddProgramareController and 
passing it the username located in Numeutilzator*

@FXML 
 public void GetUsername() {
     try {
     FXMLLoader loader=new     FXMLLoader(getClass().getResource("/LicentaApp/AddProgramare.fxml"));
     Parent root = (Parent) loader.load();

     AddProgramareController AddPr=loader.getController();
     AddPr.MyUsername(Numeutilzator.getText());


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

}
}
下面是一个将apoint添加到db的类,我在下面的代码中指出了用户名的函数是什么(我添加了所有代码,以便您更好地理解发生了什么)

尝试添加新约会时收到的错误消息是:

原因:java.lang.NullPointerException 在licenstapp.AddProgramareController.AddProgramare(AddProgramareController.java:103)

第103行:字符串numeutilizator=numeutilizator.getText()

因此,来自numeutilizator的数据不是输入输出的数据,这意味着我无法将参数从一个控制器传递到另一个控制器


注意:我一直在关注这一点,但无法理解。

发生此异常的原因有多种:

  • 控制器实例未与fxml一起使用
  • 与控制器实例一起使用的fxml不包含
    fx:id=“Numeutilizator”
因此,我将发布一个简单的示例,从使用fxml设计的场景中获取单个字符串:

应用程序类 dialog.fxml
除了检索信息,您还可以在显示fxml的内容之前将包含处理某些事件的逻辑的对象传递给控制器。

如果出现此异常,则不能将实例控制器与包含属性为
fx:id=“Numeutilizator”
的元素的fxml一起使用。fx:id=“Numeutilizator”如果这是您所指的
fxmloader=new fxmloader(getClass().getResource(“/LicentaApp/AddProgramare.FXML”)我正在上诉将接收用户名的控制器(Numeutilizator),我做对了,是吗?
ID_account | Username | Password | Email | Nume |  Prenume | Admin
package LicentaApp;



public class LogareController implements Initializable {
 public LoginVerifier loginVerifier = new LoginVerifier();





   @FXML
   private TextField Numeutilzator; Numeutilziator is the username that I am talking about

   @FXML
   private PasswordField Parola;

   @FXML
   private Label Stare;









 @Override
 public void initialize(URL location, ResourceBundle resources) {


  if (loginVerifier.Conexiune()) {
      Stare.setText("");
  } else {

      Stare.setText("Conexiune nereusita!");

  }

 }

 public void Autentificare (ActionEvent event) {
 try {
         if(loginVerifier.testaredate(Numeutilzator.getText(),     Parola.getText())) {
         Stare.setText("Autentificare reusita !");
         ((Node)event.getSource()).getScene().getWindow().hide();
            Stage StagePrincipala= new Stage();
            FXMLLoader incarcator= new FXMLLoader();
            Pane parinte = incarcator.load(getClass().getResource("/LicentaApp/Meniu.fxml").openStream());

            Scene scene = new Scene(parinte);
                scene.getStylesheets().add(getClass().getResource("Style1212.css").toExternalForm());
            StagePrincipala.setScene(scene);
            StagePrincipala.show();

          }
     else { 
         Stare.setText("Nume de utilizator sau parola incorect");

     }




} catch (SQLException e) {





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

    e.printStackTrace();
    }
 }
 @FXML
    public void Inregistrare(ActionEvent event) {
        try {
         ((Node)event.getSource()).getScene().getWindow().hide();
            Stage PS= new Stage();
            FXMLLoader incarcator= new FXMLLoader();
            Pane parinte = incarcator.load(getClass().getResource("/LicentaApp/InregistrareUser.fxml").openStream());
            Scene scena = new Scene(parinte);
            scena.getStylesheets().add(getClass().getResource("Style1212.css").toExternalForm());
            PS.setScene(scena);
            PS.show();
    } catch (Exception e) {

    }

*Here I m calling the function that I made in AddProgramareController and 
passing it the username located in Numeutilzator*

@FXML 
 public void GetUsername() {
     try {
     FXMLLoader loader=new     FXMLLoader(getClass().getResource("/LicentaApp/AddProgramare.fxml"));
     Parent root = (Parent) loader.load();

     AddProgramareController AddPr=loader.getController();
     AddPr.MyUsername(Numeutilzator.getText());


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

}
}
package LicentaApp;



public class AddProgramareController implements Initializable {
    ObservableList Timestamp=FXCollections.observableArrayList();




@FXML
private TextField Nume;

@FXML
private TextField Prenume;

@FXML
private TextField Ora;

@FXML
private DatePicker Data;

@FXML
private TextField Departament;

@FXML
private TextField Doctor;

@FXML
private TextField Nr_telefon;

@FXML
private TextField Numeutilizator;













public void initialize(URL location, ResourceBundle resources) {

} 

*This is the function that I'll call in GetUsername from LogareController
 public void MyUsername(String Numeutilizator) {
    this.Numeutilizator.setText(Numeutilizator);

}

@FXML 
private void AddProgramare(ActionEvent event) throws SQLException, IOException  {


    String Interogare1= "INSERT INTO programaritest(Nume,Prenume,Data,Ora,Departament,Doctor,Nr_telefon,Numeutilizator) VALUES(?,?,?,?,?,?,?,?)";

    String nume=Nume.getText();
    String prenume=Prenume.getText();

    LocalDate data=Data.getValue(); 

    String ora=Ora.getText();
    String departament=Departament.getText();
    String doctor=Doctor.getText();
    String nr_telefon=Nr_telefon.getText();
    String numeutilizator=Numeutilizator.getText();

    try {
        ConectaredB ConectaredB=new ConectaredB();
        Connection conexiune=ConectaredB.logareDB();
        PreparedStatement MG = conexiune.prepareStatement(Interogare1);


        MG.setString(1, nume);
        MG.setString(2, prenume);
        MG.setDate(3, Date.valueOf(data)); 
        MG.setString(4, ora);
        MG.setString(5, departament);
        MG.setString(6, doctor);
        MG.setString(7, nr_telefon);
        MG.setString(8, numeutilizator);

        MG.executeUpdate();

        // ...
   } catch (SQLException exceptie1) {
       exceptie1.printStackTrace(); 
   }


}
}
@Override
public void start(Stage primaryStage) {
    Button btn = new Button("Get input");
    btn.setOnAction((ActionEvent event) -> {
        FXMLLoader loader = new FXMLLoader(getClass().getResource("dialog.fxml"));
        Parent p;
        try {
            p = loader.load();
        } catch (IOException ex) {
            throw new RuntimeException(ex);
        }
        DialogController controller = loader.getController();

        Stage stage = new Stage(StageStyle.UTILITY);
        stage.initOwner(primaryStage);
        stage.setScene(new Scene(p, 100, 100));

        stage.showAndWait(); // display window and wait for close

        if (controller.isCanceled()) {
            System.out.println("canceled");
        } else {
            System.out.println("input submitted: " + controller.getText());
        }
    });

    StackPane root = new StackPane(btn);

    Scene scene = new Scene(root, 300, 300);

    primaryStage.setScene(scene);
    primaryStage.show();
}
<VBox xmlns:fx="http://javafx.com/fxml/1" fx:controller="fxml.DialogController">
    <children>
        <TextField fx:id="input"/>
        <Button text="submit" onAction="#submit"/>
        <Button text="cancel" onAction="#cancel"/>
    </children>
</VBox>
public class DialogController {
    @FXML
    private TextField input;

    private boolean canceled = true;

    public boolean isCanceled() {
        return canceled;
    }

    public final String getText() {
        return input.getText();
    }

    private void close(boolean canceled) {
        this.canceled = canceled;
        input.getScene().getWindow().hide();
    }

    @FXML
    private void submit() {
        close(false);
    }

    @FXML
    private void cancel() {
        close(true);
    }

}