Java - Problema Java

 
Vista:
sin imagen de perfil

Problema Java

Publicado por Lucas (10 intervenciones) el 02/02/2017 05:33:42
Hola a todos, estoy teniendo un problema en un proyecto de una plataforma de envio de mails. Ya se que el error es un nullpointerexception pero por mas que instancie de otra manera el objeto BandejaDeEntrada, me tira un stackOverFlowError y no se como solucionarlo

El log es el siguiente:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
	at Bdd.BDDUser.rellenarTabla(BDDUser.java:67)
	at Plataforma.BandejaDeEntrada.<init>(BandejaDeEntrada.java:53)
	at Plataforma.IniciarSesion$1.actionPerformed(IniciarSesion.java:57)
	at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
	at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
	at java.awt.Component.processMouseEvent(Unknown Source)
	at javax.swing.JComponent.processMouseEvent(Unknown Source)
	at java.awt.Component.processEvent(Unknown Source)
	at java.awt.Container.processEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Window.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
	at java.awt.EventQueue.access$500(Unknown Source)
	at java.awt.EventQueue$3.run(Unknown Source)
	at java.awt.EventQueue$3.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
	at java.awt.EventQueue$4.run(Unknown Source)
	at java.awt.EventQueue$4.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)

El codigo perteneciente al proyecto es

BDDUser
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
package Bdd;
import java.sql.*;
 
import javax.swing.JOptionPane;
 
import Plataforma.BandejaDeEntrada;
 
 
public class BDDUser {
	ConexionBDD cn;
	Plataforma.BandejaDeEntrada bandeja=null;
	public int size;
	public ResultSetMetaData rm;
	public BDDUser() {
		cn = new ConexionBDD();
	}
	public void rellenarTabla(){
		try{
			PreparedStatement pstm = cn.getConnection().prepareStatement("SELECT * from mensajes");
				ResultSet res = pstm.executeQuery();
				while(res.next()){
					Object[] fila=new Object[3];
					fila[0]=res.getString("emisor");
					fila[1]=res.getString("asunto");
					fila[2]=res.getString("mensaje");
					bandeja.getModelo().addRow(fila);
				}
				bandeja.getTable().updateUI();
				res.close();
 
		}catch(SQLException e){
			e.printStackTrace();
		}
	}
}

Bandeja De Entrada
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
package Plataforma;
 
import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
 
import Bdd.BDDUser;
 
import java.awt.BorderLayout;
import java.awt.ScrollPane;
 
public class BandejaDeEntrada extends JFrame {
	private static final long serialVersionUID = 1L;
	//IniciarSesion iniciar = new IniciarSesion();
	private JTable table;
	private DefaultTableModel modelo;
 
	public BandejaDeEntrada() {
		setTitle("Bandeja De Entrada");
		setSize(703, 367);
		getContentPane().setLayout(null);
 
		JButton btnActualizar = new JButton("Actualizar");
		btnActualizar.setBounds(595, 11, 89, 23);
		getContentPane().add(btnActualizar);
 
		JComboBox comboBox = new JComboBox();
		comboBox.setModel(new DefaultComboBoxModel(new String[] { "Enviados", "Recibidos" }));
		comboBox.setToolTipText("Enviados\r\nRecibidos");
		comboBox.setBounds(462, 12, 123, 20);
		getContentPane().add(comboBox);
 
		JButton btnRedactar = new JButton("Redactar");
		btnRedactar.setBounds(10, 11, 89, 23);
		getContentPane().add(btnRedactar);
 
		table = new JTable();
		table.setBounds(10, 45, 667, 273);
		getContentPane().add(table);
 
		modelo=new DefaultTableModel(){
			@Override
			public boolean isCellEditable(int fila,int columna){
				return false;
			}
		};
		table=new JTable(modelo);
		modelo.addColumn("De:");
		modelo.addColumn("Asunto");
		modelo.addColumn("Mensaje:");
		BDDUser user=new BDDUser();
		user.rellenarTabla();
 
			}
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
sin imagen de perfil
Val: 67
Ha aumentado 1 puesto en Java (en relación al último mes)
Gráfica de Java

Problema Java

Publicado por Hector (27 intervenciones) el 02/02/2017 14:51:00
Hola, como sabes el primer problema del nullpointer es porque no has instanciado Bandeja de entrada en BDDUser.

El problema del stackoverflowexception es que estas haciendo una llamada recursiva, tienes en BDDUser un objeto Bandeja de entrada y en Bandeja de entrada un objeto BDDUser, entonces lo que sucede es que si creas BDDUser el instanciara un elemento Bandeja de entrada, y despues Bandeja de entrada instanciara un nuevo objeto BDDUser, y el nuevo BDDUser creara un nuevo bandeja de entrada, y continuara asi hasta que te quedes sin memoria.

Edita el constructor de BDUser para que puedas pasar por parametro un objeto Bandeja de entrada, y le asignas el objeto a tu atributo, de esa forma estas usando la primera bandeja de entrada que instanciaste.

En BDDUser.java
1
2
3
4
public BDDUser(BandejaDeEntrada bandeja) {
	cn = new ConexionBDD();
        this.bandeja = bandeja;
}

En BandejaDeEntrada.java
1
2
3
4
5
6
.
.
BDDUser user=new BDDUser(this);
user.rellenarTabla();
.
.

Debería servirte de esa forma, un saludo
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

Problema Java

Publicado por Lucas (10 intervenciones) el 02/02/2017 21:48:10
Muchas gracias! Despues de algunos errores basicos he podido hacer que funcione.
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