将参数从一个控制器传递到另一个控制器会产生java.lang.NullPointerException
我试图获取某人用于登录的用户名,然后在某人发出指令时将其插入数据库 这是“程序测试”表 这是帐户表,其中用户名保存为唯一 用户名的输入是通过文本字段从fxml获得的,在GetUsername方法中,我在下面指出了它将参数从一个控制器传递到另一个控制器会产生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();
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的内容之前将包含处理某些事件的逻辑的对象传递给控制器。如果出现此异常,则不能将实例控制器与包含属性为
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);
}
}