NullPointerException al abrir ventana

Iniciado por edr89, 6 Diciembre 2015, 04:23 AM

0 Miembros y 1 Visitante están viendo este tema.

edr89

Hola, buen día.

He buscado un poco acerca del error y todo apunta a que en alguna parte del código deberia haber un objeto pero se encuentra con un null y la aplicación truena.

La aplicación es muy sencilla y se pueden agregar autores a una base de datos en Derby, hay un boton que abre una ventana para dar de alta un Folder, y cada folder tiene asociado un Autor. Para poder dar de alta un Folder es necesario escribir el nombre del folder y despues el usuario da click en un boton que dice buscar, el boton debería abrir una ventana donde despliega la lista de autores que previamente hemos agregado, entonces se selecciona uno y se puede dar de alta un Folder.

El problema es que al dar click en buscar autor la aplicación falla y aparece el siguiente mensaje:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at mx.uam.ayd.negocio.ControlAgregarFolder.buscarAutor(ControlAgregarFolder.java:31)
at mx.uam.ayd.presentacion.VentanaAltaFolder$1.actionPerformed(VentanaAltaFolder.java:114)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2346)
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:6525)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
at java.awt.Component.processEvent(Component.java:6290)
at java.awt.Container.processEvent(Container.java:2234)
at java.awt.Component.dispatchEventImpl(Component.java:4881)
at java.awt.Container.dispatchEventImpl(Container.java:2292)
at java.awt.Component.dispatchEvent(Component.java:4703)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4898)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4533)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4462)
at java.awt.Container.dispatchEventImpl(Container.java:2278)
at java.awt.Window.dispatchEventImpl(Window.java:2750)
at java.awt.Component.dispatchEvent(Component.java:4703)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:86)
at java.awt.EventQueue$4.run(EventQueue.java:731)
at java.awt.EventQueue$4.run(EventQueue.java:729)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)


Anteriormente teniamos la misma aplicacion pero las clases se llamaban Libros, solamente ajustamos los nombre y quitamos un campo que no necesitamos y al correr la aplicación esta fallando. El flujo es mas o menos el siguiente:

EL boton que dispara la accion para desplegarla ventana con autores es el siguiente:
Código (java) [Seleccionar]
/**
* This method initializes jButtonBuscarAutor
*
* @return javax.swing.JButton
*/
private JButton getJButtonBuscarAutor() {
   if (jButtonBuscarAutor == null) {
       jButtonBuscarAutor = new JButton();
       jButtonBuscarAutor.setBounds(new Rectangle(347, 120, 86, 40));
       jButtonBuscarAutor.setText("Buscar");
       jButtonBuscarAutor.addActionListener(new java.awt.event.ActionListener() {
           public void actionPerformed(java.awt.event.ActionEvent e) {
               autor = control.buscarAutor();
               if(autor != null) {
               jLabelNombreAutor.setText(autor.toString()); //Muestra el nombre del autor actualmente seleccionado
               }
           }
       });
   }
   return jButtonBuscarAutor;
}


Y la clase control tiene el siguiente código:
Código (java) [Seleccionar]
public class ControlAgregarFolder {
private DAOFolder DAOFolders;//libreria
private DAOAutor DAOautores;
private VentanaAltaFolder VentanaFolder;

public ControlAgregarFolder(DAOFolder DAOFolders, DAOAutor autores) {
   this.DAOFolders = DAOFolders;
   this.DAOautores = autores;
}

public void inicia() {
   VentanaFolder = new VentanaAltaFolder(this);
   VentanaFolder.setVisible(true);
}

public Autor buscarAutor() {
//En la siguiente linea el programa esta fallando, cuando ejecuta DAOautores.dameAutores()
   Autor arregloAutores[] = DAOautores.dameAutores(); // Obtiene lista de autores
   DialogoSeleccionAutor dialogo = new DialogoSeleccionAutor(new JFrame(),arregloAutores);
// Crea el dialogo con la lista de autores
   dialogo.setVisible(true); // Muestra el dialogo
   return dialogo.getAutorSeleccionado(); // Regresa el autor seleccionado en el dialogo
}

public void agregarFolder(String nombre, Autor autor, String ruta) {
   DAOFolders.agregaFolder(new Folder(nombre,autor,ruta));
}
}


Y donde se supone que esta fallando es en la linea que hace referencia al DAOAutor cuyo codigo es:
Código (java) [Seleccionar]
public Autor[] dameAutores() {
ArrayList <Autor> autoresTemp = new ArrayList <Autor>();
try {
// Crea el statement
Statement statement = ManejadorBD.dameConnection().createStatement();
// Recibe los resutados
ResultSet rs = statement.executeQuery("SELECT * FROM Autores");
while(rs.next())
{
// Crea una nueva instancia del objeto
Autor autor = new Autor(rs.getString("nombre"),rs.getString("apellido"));
autoresTemp.add(autor);
}
Autor autoresTempArreglo[]=new Autor[autoresTemp.size()];
autoresTemp.toArray(autoresTempArreglo);
return autoresTempArreglo;
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}
}


edito: conseguimos resolver el problema comenzando desde cero, no supe porque daba el error.  En los DAO algunos métodos regresaban null si fallaba algo en la conexion o las sentencias de SQL, imaginé que por ahi estaba el problema.

Saludos