nullpointerexception和loadexceptionjavafx公司

ltskdhd1  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(198)

我正在用javafx和fxml文件在netbean和scenebuilder上开发一个应用程序。对于主窗口中弹出的不同内容,我有不同的控制器。我从主控制器调用fxml弹出窗口,它有自己的独立控制器。以下是主控制器中调用新内容的函数:

public void mostrar_alumno(Alumno a) throws IOException {
    centro.getChildren().clear();
    FXMLLoader visualizador_alumno = new FXMLLoader(getClass().getResource("/visualizador_alumno/FXMLVisualizadorAlumno.fxml"));
    centro.getChildren().add(visualizador_alumno.load());
    FXMLVisualizadorAlumnoController controlador_visualizador_alumno = visualizador_alumno.getController();
    controlador_visualizador_alumno.setAlumno(a);
    boton_crear.setDisable(true);
}

抱歉,变量中有西班牙语名称>:)
事情是这样的 controlador_visualizador_alumno.setAlumno(a); 我在控制器上设置了那个变量。这是另一个控制器的代码,必须弹出:

public class FXMLVisualizadorAlumnoController implements Initializable {

@FXML
private ImageView foto;
@FXML
private TextField nombre;
@FXML
private TextField apellidos;
@FXML
private TextField correo;
private Tutorias misTutorias;
private Alumno alumno;

/**
 * Initializes the controller class.
 */
@Override
public void initialize(URL url, ResourceBundle rb) {
    // TODO
    misTutorias = AccesoBD.getInstance().getTutorias();
    //Inicializamos los datos.
    nombre.setText(alumno.getNombre());
    apellidos.setText(alumno.getApellidos());
    correo.setText(alumno.getEmail());               

}    

public void setAlumno(Alumno a) {
    alumno = a;
}

}
因此,当调用主窗口中的方法并弹出新内容时,我在中得到一个loadexception centro.getChildren().add(visualizador_alumno.load()); 和一个nullpointerexception nombre.setText(alumno.getNombre()); 我想这是因为 nombre.setText(alumno.getNombre()); 是initialize方法和变量 alumno 是从第一个控制器设置的,所以我还没有到那里,我不确定。如果你能帮我解决这个问题,我将非常高兴。任何帮助都是好的。谢谢你抽出时间。

q5lcpyga

q5lcpyga1#

正如你所说:
这是因为 nombre.setText(alumno.getNombre()); 是在 initialize() 方法和变量 alumno 是从第一个控制器设置的,因此它还不在那里。
准确地说 initialize() 方法作为调用的一部分进行调用 load() ,这必须在您访问控制器之前发生。
你所需要做的就是移动依赖于 alumnosetAlumno(...) 方法。这在语义上也是有意义的(当你改变时) alumno ,更新显示其数据的文本字段):

@Override
public void initialize(URL url, ResourceBundle rb) {
    // TODO
    misTutorias = AccesoBD.getInstance().getTutorias();
    //Inicializamos los datos.

}    

public void setAlumno(Alumno a) {
    alumno = a;
    nombre.setText(alumno.getNombre());
    apellidos.setText(alumno.getApellidos());
    correo.setText(alumno.getEmail());               
}

相关问题