Java - Error nullPointerException

 
Vista:
sin imagen de perfil
Val: 58
Ha aumentado 1 puesto en Java (en relación al último mes)
Gráfica de Java

Error nullPointerException

Publicado por Camilo (12 intervenciones) el 04/02/2020 20:02:57
Buenas.

Tengo el siguiente problema, y es que cuando trato de acceder a los valores, en este caso el texto del JTexFlied, me bota el error NullPointerException y no sé el por qué.

El siguiente método se encuentra en una clase que implementa ActionListener.

1
2
3
4
5
6
7
8
9
10
11
public void actionPerformed(ActionEvent e) {
    String fuente= e.getActionCommand();
    String aux= "";
    switch(fuente){
    case "ComboBox":
 
        break;
    case "btn0":
        aux= ventana.getTfNumero().getText();
        ventana.getTfNumero().setText(aux + "0");
        break;

El problema está en
1
aux= ventana.getTfNumero().getText();
en donde el TfNumero se encuentra en otra clase que hereda de JFrame y ventana el objeto de dicha clase.

Aqui el código donde instancio el objeto ventana:

1
2
3
4
5
6
public void inicio(){
    if(ventana==null){
        ventana= new VistaCalculadora();
    }
    ventana.setVisible(true);
}

Y aqui donde creo el JTextField:

1
2
3
4
tfNumero= new JTextField();
tfNumero.setSize(panelCalculo.getWidth()-10, 30);
tfNumero.setPreferredSize(tfNumero.getSize());
panelCalculo.add(tfNumero);

Metodo get y set del JTextField:

1
2
3
4
5
6
7
public JTextField getTfNumero() {
    return tfNumero;
}
 
public void setTfNumero(JTextField tfNumero) {
    this.tfNumero = tfNumero;
}

De antemano gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Kabuto
Val: 1.938
Oro
Ha aumentado 1 puesto en Java (en relación al último mes)
Gráfica de Java

Error nullPointerException

Publicado por Kabuto (479 intervenciones) el 04/02/2020 20:52:10
Parece que tal vez, o "ventana" o "tfNumero", no estuvieran inicializados cuando se lleva a cabo la acción.

Prueba a añadir código temporalmente para comprobar, por ejemplo en este método:

1
2
3
4
5
6
7
public JTextField getTfNumero() {
    if (tfNumero == null)
        System.out.println("tfNumero es nulo, parece NO inicializado");
    else
        System.out.println("tfNumero NO es nulo, parece estar correcto");
    return tfNumero;
}

Ejecuta el programa y a ver que te dice en pantalla.

Si te dice que es nulo, revisa los constructores de VistaCalculadora o allá donde se construya este JTextField para ver por qué esta nulo cuando el programa ha sido iniciado.

Si de dice que NO es nulo, pues puedes borrar esas líneas de código y probar algo parecido en otro sitio.

Al menos así, vas descartando posibles problemas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 58
Ha aumentado 1 puesto en Java (en relación al último mes)
Gráfica de Java

Error nullPointerException

Publicado por Camilo (12 intervenciones) el 05/02/2020 19:26:50
Hice las pruebas, y el error esta en "ventana", sigo sin entender por qué me bota el error si ventana se iniciliza al principio, pero al parecer al entrar al método es como si no estuviera inicializada
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 58
Ha aumentado 1 puesto en Java (en relación al último mes)
Gráfica de Java

Error nullPointerException

Publicado por Camilo (12 intervenciones) el 05/02/2020 20:56:47
Ya he solucionado dicho problema usando el siguiente método:
1
2
3
4
5
6
public VistaCalculadora getVentana(){
    if(ventana==null){
        ventana= new VistaCalculadora();
    }
    return ventana;
}
el problema ahora, es que no me actualiza el jtextflield (tfNumero), es decir, me guarda el valor del texto, pero no lo muestra en pantalla.
Al igual, al escribir texto dentro de tfNumero y utilizar getText(), no está guardando el texto escrito.
aquí el código donde le asigno el texto a tfNumero:
1
2
3
4
5
6
7
8
9
10
11
12
13
public void actionPerformed(ActionEvent e) {
    String fuente= e.getActionCommand();
    String aux= "";
    switch(fuente){
    case "ComboBox":
 
        break;
    case "btn0":
        aux= getVentana().getTfNumero().getText();
        getVentana().getTfNumero().setText(aux + "0");
        break;
    }
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Kabuto
Val: 1.938
Oro
Ha aumentado 1 puesto en Java (en relación al último mes)
Gráfica de Java

Error nullPointerException

Publicado por Kabuto (479 intervenciones) el 06/02/2020 00:41:23
Quizás para interactuar con el JTextField, en lugar de usar get y set, todo funcione mejor usando un método que reciba el String que quieres añadir.
Básicamente es hacer lo mismo, pero sin "getear" el campo de texto.
Por ejemplo:

1
2
3
4
public void addTfnumero(String txt) {
    String aux = tfNumero.getText();
    tfNumero.setText(aux + txt);
}

Este método iría declarado junto a los métodos donde tienes el get y set del tfNumero.

Y entonces, en el switch del actionPerformed:

1
2
3
4
5
6
7
8
9
10
11
12
public void actionPerformed(ActionEvent e) {
    String fuente= e.getActionCommand();
    String aux= "";
    switch(fuente){
    case "ComboBox":
 
        break;
    case "btn0":
        getVentana().addTfnumero("0");
        break;
    }
}


Por otra parte, lo de andar "geteando" la ventana puede que tampoco sea lo ideal para acceder a sus métodos.

No se en que clase tienes declarado este método actionPerformed(), pero en dicha clase, quizás fuese interesante que tuviera un atributo de la clase VistaCalculadora, que hiciese referencia a dicha ventana, para no andar "geteandola" y así poder acceder a sus métodos a través de ese atributo.

Pero bueno, todo depende de cómo tengas estructuradas las clases
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 58
Ha aumentado 1 puesto en Java (en relación al último mes)
Gráfica de Java

Error nullPointerException

Publicado por Camilo (12 intervenciones) el 06/02/2020 21:26:40
Ya he encontrado la solucion y ha sido esta:
1
2
3
public Controller(VistaCalculadora v){
		ventana= v;
	}
este constructor es de la clase donde se encuentra el actionPerformed().
No sé porque (haciendo un debug), cada vez que entraba dentro del actionPerformed() el objeto "ventana" entraba como si no estuviera inicializado, entonces cada vez que llegaba al método getVentana()
1
2
3
4
5
6
public VistaCalculadora ventana(){
		if(ventana==null){
			ventana= new VistaCalculadora();
		}
		return ventana;
	}
entraba dentro del if e inicializaba de nuevo "ventana", por lo que, al acceder al constructor de VistaCalculadora (donde inicializo y añado el listener a los objetos Swing) la ventana volvia a crearse (o así lo he entendido, sin embargo aún no me explico si esto era así, porque el texto del tfNumero si quedaba guardado dentro de una variable (auxiliar) pero no lo mostraba, a pesar de que supuestamente este volvia a crearse).
Agradeceria si saben el porque de dicho problema.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar