Buscar
Social
Ofertas laborales ES

Foro sobre Java SE > NiullPointerException static Instances

Buenos días,
Tengo un problema con un código java swing que he implementado para el trabajo,
las versiones anteriores del código funcionan para todos los clientes.
He sacado una versión nueva(7) del código y esta versión funciona para la mayoría de clientes, pero en dos de ellos ni se abre la interfaz, me sale una excepción de NullPointerException cuando llamo a las variables estáticas.
En los clientes donde no funciona de versión 7, si vuelvo a poner una versión anterior todo funciona bien.
La verdad no se que pasa, si el error está en el código de la versión 7 o en otra cosa.
mi IDE es Netbeans.
Gracias.

mayo 15, 2016 | Registered Commenterjsahara

Podrías poner un ejemplo (a ser posible un ejecutable sencillo), donde se vea el error con claridad.
Un NPE se lanza cuando alguna variable no está inicializada, y se usa como si lo estuviese. Que sea estática no tiene nada que ver.

mayo 15, 2016 | Registered Commenterchoces

package javaapplication1;
public class Persona {
private String nombre;
public Persona(String nombre) {
this.nombre = nombre;
}
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
}
//////////////////////////////////////////////////////////////////////////////////
package javaapplication1;
public class Inicializar {
public static Persona persona;
public Inicializar(){
persona = new Persona("nombre");
}
}
////////////////////////////////////////////////////////////////////////
package javaapplication1;
public class JavaApplication1 {
public static void main(String[] args) {
Inicializar inicializar = new Inicializar();
try{
String nombre = Inicializar.persona.getNombre();
}catch(Exception e){
System.out.println("Error "+e);
}
}
}

y de salida imprime solo: "Error NullPointerExeption"

mayo 15, 2016 | Registered Commenterjsahara

He probado ese código con JavaSE 1.8 y no solo no lanza la excepción, sino que tampoco veo motivos para ello.

De todos modos, usar ese inicializador es algo rebuscado. ¿Por qué no usar directamente una instancia de Persona?.
Depender de una variable estática, pública y que no es final, y que se inicializa en un método (aunque sea el constructor) puede ser una fuente de "cosas raras".

Si insistes en usar ese inicializador, al menos hazlo así:

public class Inicializar {
public static final Persona persona = new Persona("nombre");
public Inicializar(){
}
}

mayo 15, 2016 | Registered Commenterchoces