Foro de elhacker.net

Programación => Java => Mensaje iniciado por: mgc en 14 Noviembre 2015, 18:29 pm



Título: Exception al rellenar un JList
Publicado por: mgc en 14 Noviembre 2015, 18:29 pm
Hola,

Tengo un problema al intentar rellenar un JList en swing, este método es el que utilizo para llenar la lista:

Código:
private void llenarLista(List lista) {
         DefaultListModel model = new DefaultListModel();
        for(int i=0; i<lista.size(); i++){
            model.addElement(lista.get(i));
        }
        listaExplotaciones.setModel(model);
    }

He puesto un botón en la pantalla, y su acción va a ser llenar el JList:

Código:
List lista=miCoordinador.consultarExplotaciones("user2");
        llenarLista(lista);

La lista es una consulta que se realiza en la clase objeto, el método es el siguiente:

Código:
public List consultarExplotaciones(String usuario) {
                List miLista=null;
Connection connection=null;
Conexion miConexion=new Conexion();
PreparedStatement statement=null;
ResultSet result=null;

ExplotacionesVo miExplotacion=new ExplotacionesVo();

connection=miConexion.getConnection();

String consulta="SELECT * FROM T_EXPLOTACIONES where USUARIO= ?";

try {
if (connection!=null) {
statement=connection.prepareStatement(consulta);
statement.setString(1, usuario);

result=statement.executeQuery();

while(result.next()==true){
miExplotacion=new ExplotacionesVo();
miExplotacion.setUsuario(result.getString("USUARIO"));
miExplotacion.setCodigo(result.getString("CODIGO"));
miExplotacion.setEspecie(result.getString("ESPECIE"));
miExplotacion.setTitular(result.getString("TITULAR"));
miExplotacion.setDireccion(result.getString("DIRECCION"));
miExplotacion.setLocalidad(result.getString("LOCALIDAD"));
miExplotacion.setCodigoPostal(result.getString("CODIGO_POSTAL"));
miExplotacion.setProvincia(result.getString("PROVINCIA"));
miExplotacion.setTelefono(result.getString("TELEFONO"));
                                        miLista.add(miExplotacion);
}
   miConexion.desconectar();
}else{
miLista=null;
}

   
} catch (SQLException e) {
System.out.println("Error en la consulta de la explotación: "+e.getMessage());
}

return miLista;
}

Cuando pulso el botón, me da la siguiente excepción:

Código:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at vista.VentanaExplotaciones.llenarLista(VentanaExplotaciones.java:254)
at vista.VentanaExplotaciones.btnLlenarActionPerformed(VentanaExplotaciones.java:222)
at vista.VentanaExplotaciones.access$000(VentanaExplotaciones.java:15)
at vista.VentanaExplotaciones$2.actionPerformed(VentanaExplotaciones.java:99)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.java:6505)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3320)
at java.awt.Component.processEvent(Component.java:6270)
at java.awt.Container.processEvent(Container.java:2229)
at java.awt.Component.dispatchEventImpl(Component.java:4861)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
at java.awt.Container.dispatchEventImpl(Container.java:2273)
at java.awt.Window.dispatchEventImpl(Window.java:2719)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735)
at java.awt.EventQueue.access$200(EventQueue.java:103)
at java.awt.EventQueue$3.run(EventQueue.java:694)
at java.awt.EventQueue$3.run(EventQueue.java:692)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.awt.EventQueue$4.run(EventQueue.java:708)
at java.awt.EventQueue$4.run(EventQueue.java:706)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:705)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:154)
at java.awt.WaitDispatchSupport$2.run(WaitDispatchSupport.java:182)
at java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:221)
at java.security.AccessController.doPrivileged(Native Method)
at java.awt.WaitDispatchSupport.enter(WaitDispatchSupport.java:219)
at java.awt.Dialog.show(Dialog.java:1082)
at java.awt.Component.show(Component.java:1651)
at java.awt.Component.setVisible(Component.java:1603)
at java.awt.Window.setVisible(Window.java:1014)
at java.awt.Dialog.setVisible(Dialog.java:1005)
at controlador.Coordinador.mostrarVentanaExplotaciones(Coordinador.java:87)
at vista.VentanaInicio.btnExplotacionesActionPerformed(VentanaInicio.java:102)
at vista.VentanaInicio.access$000(VentanaInicio.java:22)
at vista.VentanaInicio$1.actionPerformed(VentanaInicio.java:65)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.java:6505)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3320)
at java.awt.Component.processEvent(Component.java:6270)
at java.awt.Container.processEvent(Container.java:2229)
at java.awt.Component.dispatchEventImpl(Component.java:4861)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
at java.awt.Container.dispatchEventImpl(Container.java:2273)
at java.awt.Window.dispatchEventImpl(Window.java:2719)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735)
at java.awt.EventQueue.access$200(EventQueue.java:103)
at java.awt.EventQueue$3.run(EventQueue.java:694)
at java.awt.EventQueue$3.run(EventQueue.java:692)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.awt.EventQueue$4.run(EventQueue.java:708)
at java.awt.EventQueue$4.run(EventQueue.java:706)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:705)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)


La línea 254 es esta:
Código:
model.addElement(lista.get(i));

¿Alguien sabe que es lo que me puede estar fallando?

Muchas gracias de antemano, saludos.


Título: Re: Exception al rellenar un JList
Publicado por: ivancea96 en 14 Noviembre 2015, 20:11 pm
Código
  1. List miLista=null;

En la función consultaExplotaciones. En ningún mimento instancias "miLista", siempre es null.


Título: Re: Exception al rellenar un JList
Publicado por: mgc en 14 Noviembre 2015, 21:16 pm
Hola,

Si te fijas en el método consultarExplotaciones, dentro del while, una vez que asigna los valores a cada uno de los atributos al objeto, luego añado el objeto a la propia lista:

Código:
miLista.add(miExplotacion);

Gracias por tu respuesta.

Saludos


Título: Re: Exception al rellenar un JList
Publicado por: ivancea96 en 15 Noviembre 2015, 09:59 am
No puedes utilizar métodos sobre un objeto null.
Pusiste miConexion = new Conexion(). Tuenes que hacer lo mismo con List.


Título: Re: Exception al rellenar un JList
Publicado por: mgc en 15 Noviembre 2015, 14:40 pm
Hola,

En el caso de Conexión es una clase propia mia, si pongo :

Código:
List miLista=new List();

Debo sobreescribir todos los métodos de la clase List.

No sé muy bien cómo debería hacer esto que me dices, si me ayudas te lo agradezco.

Saludos


Título: Re: Exception al rellenar un JList
Publicado por: rub'n en 15 Noviembre 2015, 17:08 pm
xq no usas genéricos? con java <> ? no es mejor para este caso? y de paso mas actual.

si tienes que sobre escribir métodos debes usar Herencia crear los constructores respectivos, mas el uso de super(), y this.


Título: Re: Exception al rellenar un JList
Publicado por: mgc en 15 Noviembre 2015, 17:28 pm
Eso he hecho, pero me sigue saltando la excepción NullPointerException.
Ahora tengo el código de la siguiente manera:

Código:
public class VentanaExplotaciones extends javax.swing.JDialog {
    private Coordinador miCoordinador;
    DefaultListModel modeloExplotaciones;
    ArrayList <ExplotacionesVo> miLista=new ArrayList <ExplotacionesVo>();
   

    /**
     * Creates new form VentanaExplotaciones
     */
    public VentanaExplotaciones(java.awt.Frame parent, boolean modal) {
        super(parent, modal);
        initComponents();
        setIconImage(new ImageIcon(getClass().getResource("../imagenes/logotipoG24x24.png")).getImage());
       modeloExplotaciones=new DefaultListModel();
       
        miLista.add(miCoordinador.consultarExplotaciones());
        for(int i=0; i<miLista.size();i++){
        modeloExplotaciones.addElement(miLista.get(i).getCodigo());
        }
       
        jListaExpl.setModel(modeloExplotaciones);
       
     
    }

Me apunta a esta línea:

Código:
miLista.add(miCoordinador.consultarExplotaciones());

miCoordinador.consultarExplotaciones me devuelve objetos de tipo ExplotacionesVo



Título: Re: Exception al rellenar un JList
Publicado por: ivancea96 en 15 Noviembre 2015, 21:55 pm
Ahora el que no inicializas es miCoordinador :/

Ten algo muy claro: Los objetos en Java hay que inicializarlos para usarlos, <todos>, salvo los tipos básicos. Pero todos los demás objetos los inicializas de la forma conveniente, ya sea con new, o con otras técnicas, como String str = "Abc";.


Título: Re: Exception al rellenar un JList
Publicado por: mgc en 15 Noviembre 2015, 23:39 pm
Hola, puede parecer que no está inicializado, pero no es así, pues en el main de la aplicación le asigno a cada una de las ventanas a miCoordinador.

De esta forma está en todas las ventanas y funciona, yo en este caso veo algo relacionado con la lista, que además apunta la excepción.

Muchas gracias de todas formas por las molestias que te estás tomando.

Saludos


Título: Re: Exception al rellenar un JList
Publicado por: ivancea96 en 16 Noviembre 2015, 00:31 am
miCoordinador es un campo de la clase VentanaExplotaciones. El primer momento en que se inicializa es en el constructor. En ese constructor, no lo inicializas.

Saca por consola los valores de miLista y de miCoordinador, y comprueba qué son.


Título: Re: Exception al rellenar un JList
Publicado por: rub'n en 16 Noviembre 2015, 04:25 am
si es verdad, y por si acaso. debería de hacer algo como

 VentanaExplotaciones poC = new VentanaExplotaciones();
 System.out.println( poC.getMiCoordinador() ); //imprimiendo valor de variable de instancia miCoordinador a través de metodo get