Foro de elhacker.net

Programación => Java => Mensaje iniciado por: sMARIO en 20 Mayo 2014, 00:22 am



Título: Insertar elementos a una tabla
Publicado por: sMARIO en 20 Mayo 2014, 00:22 am
Buenas, soy principiante en Java aunque tengo conocimientos en C, pero me estoy comiendo mucho la cabeza en una cosa que debería de ser simple...

Si tengo un constructor que me hace tal que así:

Código:
   private RegistroDeTraduccionInterfaz [] tabla = null;
    .........
    .........
    .........

 public Nat( String direccionExterna ) throws OperacionNoPermitidaExcepcion
    {
tabla = new RegistroDeTraduccionInterfaz[ 10000 ]
        .........
        .........
        .........
    }

Por qué luego me salta NullPointerException al intentar insertar elementos a la tabla?

Código:
 public void insertarEntradaEnTabla ( RegistroDeTraduccionInterfaz entrada ) throws OperacionNoPermitidaExcepcion
{
this.tabla[0] = entrada;
}

He probado tanto eso como esto:
Código:
this.tabla[0] = new RegistroDeTraduccion(istPrivado,istPublico);	

Pero en ambos casos me salta esa excepción y no entiendo que estoy haciendo mal...

PD:
Si pongo un try/catch con NullPointerException consigo que al menos siga la ejecución, pero quiero solucionarlo y que no llegue a saltar, ya que con esto la tabla acaba vacía igualmente.


Título: Re: Insertar elementos a una tabla
Publicado por: Chuidiang en 20 Mayo 2014, 07:55 am
Hola:

En el código que estás haciendo no hay nada mal hasta donde puede verse.

Quizás no se esté ejecutando en el orden correcto : debe llamarse a Nat(...) que tiene pinta de ser el constructor de la clase antes de llamar a insertarEntradaEnTabla(...) que imagino es un método de la misma clase Nat.

Un posible error que suele ser habitual en gente que empieza es que declaran sin querer dos variables con el mismo nombre, inicializando una y usando otra. En tu caso, podrías tener ese error si has puesto "RegistroDeTraduccionInterfaz [] tabla" en algún otro sitio aparte del que muestras en el código, ya que estarías declarando otra variable con el mismo nombre.

Se bueno.


Título: Re: Insertar elementos a una tabla
Publicado por: sMARIO en 20 Mayo 2014, 11:19 am
Hola:

En el código que estás haciendo no hay nada mal hasta donde puede verse.

Quizás no se esté ejecutando en el orden correcto : debe llamarse a Nat(...) que tiene pinta de ser el constructor de la clase antes de llamar a insertarEntradaEnTabla(...) que imagino es un método de la misma clase Nat.

Un posible error que suele ser habitual en gente que empieza es que declaran sin querer dos variables con el mismo nombre, inicializando una y usando otra. En tu caso, podrías tener ese error si has puesto "RegistroDeTraduccionInterfaz [] tabla" en algún otro sitio aparte del que muestras en el código, ya que estarías declarando otra variable con el mismo nombre.

Se bueno.

Ya encontré el fallo, efectivamente lo que he puesto está bien, el error era que en el programa principal justo después de crear la tabla se invocaba una clase que vaciaba esta tabla y dentro de esta clase lo único que había era un this.tabla = null
Se me olvidó poner también lo de tabla = new RegistroDeTraduccionInterfaz[ 10000 ]

El problema que tengo ahora es el siguiente:

Código:
 IstInterfaz Publico = buscaIstPrivado(paquete.getIstOrigen());		    
    paquete.getIstOrigen().setDireccion(Publico.getDireccion());
    paquete.getIstOrigen().setPuerto(Publico.getPuerto());

Teniendo en cuenta que buscaIstPrivado devuelve un IstInterfaz y crea la primera entrada en la tabla (tabla[0]) por que cuando hago las dos líneas siguientes, aparte de afectar a "paquete" afecta a la tabla?
Quiero decir, si justo después de IstInterfaz Publico = buscaIstPrivado (paquete.getIstOrigen()); hago System.out.println(tabla[0].getIstPrivado().getDireccion()); me aparece una dirección llamemosle A. Bien, pues si este print lo hago tras la última sentencia, la dirección es diferente.

Las clases creo que por el nombre se entiende lo que hacen, pero lo pongo:
getIstOrigen() --> retorna el Ist
setDireccion(InetAddress) --> cambia la dirección
setPuerto(int) --> cambia el puerto

paquete es del mismo tipo que la tabla --> RegistroDeTraduccionInterfaz


Título: Re: Insertar elementos a una tabla
Publicado por: zonahurbana en 22 Mayo 2014, 21:17 pm
Es posible que tanto tabla[0].getIstPrivado() como paquete.getIstOrigen() hagan referencia al mismo objeto, y que ambos se modifiquen si se modifica uno. Al menos eso creo :S


Título: Re: Insertar elementos a una tabla
Publicado por: puntoBat en 23 Mayo 2014, 13:55 pm
Acabo de poner una duda que tengo sobre el jTable,

http://foro.elhacker.net/java/jtable_y_regitros_de_bases_de_datos-t415178.0.html


Quizas pueda resultarte util algo.

Luego el objeto filas se lo pasas al DefaultTableModel y este al setmodel y a funcionar


Título: Re: Insertar elementos a una tabla
Publicado por: sMARIO en 23 Mayo 2014, 17:12 pm
Es posible que tanto tabla[0].getIstPrivado() como paquete.getIstOrigen() hagan referencia al mismo objeto, y que ambos se modifiquen si se modifica uno. Al menos eso creo :S
Si, este era el fallo, ya conseguí solucionarlo, muchas gracias!