Erro de StackOverFlow galeraaa!

Fala ae pessoal!!!
Po galera… to precisando muito da ajuda de vcs ae!!!
A parada é o seguinte…Estou desenvolvendo um aplicativo para um amigo meu aqui e empaquei em uma parte aqui do projeto!
Tipo… estou precisando de buscar algumas informações no banco através de meu controle… só que toda vez que crio um objeto da minha tela para poider pegar as informações do textField ele me vem com um erro de StackOverFlow! Mas não sei como consegui estourar a pilha!!
O código do meu controle é esse ae:

[code]package controle;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JOptionPane;

import modelo.Login;
import visao.TelaLogin;
import dao.DAOFactory;
import dao.DAOLogin;

public class ControleLogin implements ActionListener{

 DAOFactory df=DAOFactory.getDAOFactory(DAOFactory.POSTGRES);
 DAOLogin dao = df.getDAOLogin();

 private TelaLogin  tela ;

public TelaLogin (){

               tela = new TelaLogin(); //toda vez que tento isso ele me vem com o StackOverFlow!!!!!
               }

 public void actionPerformed(ActionEvent evt) {
	
	String comando = evt.getActionCommand();
	
	if (comando.equals("entrar")){
		try{
		Login l = new Login();
		l.setUsuario(tela.getTxtUsuario());
		dao.consultar(l);
		if (l.getUsuario()!= null){
			JOptionPane.showMessageDialog (null, "Suuuuuucesso!");
		}
		JOptionPane.showMessageDialog(null, "ERRO");
	}

catch (Exception e){

	JOptionPane.showMessageDialog (null, "ERRO :" +e);
	
		}
	}
}

}
[/code]

O código da minha tela é esse ae :

package visao;

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.Insets;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JRootPane;
import javax.swing.JTextField;

import modelo.Login;
import controle.ControleLogin;

public class TelaLogin {
	private JFrame pFrame;
	private JDialog fDialog;
	private JLabel lblUsuario;
	private JLabel lblSenha;
	private JTextField txtUsuario;
	private JPasswordField pswSenha;
	private Container c;
	private JPanel pNorte;
	private JPanel pCentro;
	private JPanel pCampos;
	private JPanel pBotoes;
	private JPanel pImagem;
	
	 
	public TelaLogin(){
		
		//controle
		ControleLogin controle = new ControleLogin();
		
		
		//constroi o dialog
		fDialog = new JDialog(pFrame, true);
				
		//cria componentes
		c = fDialog.getContentPane();
		c.setLayout(new BorderLayout());
		pNorte = new JPanel(new FlowLayout(FlowLayout.CENTER));
		pBotoes = new JPanel(new GridLayout(1,2,20,5));
		pCentro = new JPanel( new FlowLayout(FlowLayout.CENTER));
		
		GridBagConstraints gc = new GridBagConstraints();
		//distancia em comprimento dos componetes
		gc.ipadx = 10;
		//alinhamento de componentes
		gc.anchor = GridBagConstraints.FIRST_LINE_START;
		//distancia das bordas dos componetes
		gc.insets = new Insets(5,5,2,2);
		
		
		pCampos = new JPanel(new GridBagLayout());
		pImagem = new JPanel(new GridBagLayout());
		
		lblUsuario = new JLabel("Usuário");
		txtUsuario = new JTextField(20);
		txtUsuario.setToolTipText("Digite seu nome de usuário no sistema");
		lblSenha = new JLabel("Senha");
		pswSenha = new JPasswordField(20);
		pswSenha.setToolTipText("Digite sua senha no sistema");
		JButton btnEntrar = new JButton("Entrar");
		btnEntrar.setIcon(new ImageIcon("icIr.png"));
		btnEntrar.setToolTipText("Clique aqui para realizar o Login no sistema!");
		JButton btnCancelar = new JButton("Cancelar");
		btnCancelar.setIcon(new ImageIcon("icCancelar.png"));
		
		//relaciona nome do componente ao evento.
		btnEntrar.setActionCommand("entrar");
		btnCancelar.setActionCommand("cancelar");
		
		//cria a imagem e o texto de bem-vindo
		JLabel lb = new JLabel();
		lb.setIcon(new ImageIcon("login.png"));
		JLabel texto = new JLabel("<html><center>Seja bem-vindo ao sistema.<br>Por favor, insira seu login e<br>senha. Se você não possui<br>login e senha, por favor,<br>contate o administrador.<br><br><br></center></html>");
		texto.setFont(new Font("Arial",1,16));
		lb.setOpaque(false);
		
		//adicionando componentes no gridBagLayout
		gc.gridx = 0;
		gc.gridy = 1;
		pCampos.add(lblUsuario,gc);
		gc.gridx = 1;
		gc.gridy = 1;
		pCampos.add(txtUsuario,gc);
		gc.gridx = 0;
		gc.gridy = 2;
		pCampos.add(lblSenha,gc);
		gc.gridx = 1;
		gc.gridy = 2;
		pCampos.add(pswSenha,gc);
		gc.gridx = 0;
		gc.gridy = 0;
		gc.gridwidth=2;
		gc.fill = GridBagConstraints.HORIZONTAL;
		pCampos.add(texto,gc);
		gc.gridx = 0;
		gc.gridy = 0;
		gc.gridwidth=0;
		gc.fill=0;
		pImagem.add(lb,gc);
		
		//adiciona componentes ao gridlayout
		pBotoes.add(btnEntrar);
		pBotoes.add(btnCancelar);
		
		//adiciona componentes ao container.
		pNorte.add(pImagem);
		pNorte.add(pCampos);
		pCentro.add(pBotoes);
		c.add(pNorte,BorderLayout.NORTH);
		c.add(pCentro,BorderLayout.CENTER);
		
		//adiciona ouvintes nos componentes
		btnEntrar.addActionListener(controle);
		btnCancelar.addActionListener(controle);
		
		//faz o botão entrar ser o padrão
		btnEntrar.setDefaultCapable(true);
		JRootPane rp = fDialog.getRootPane();
		rp.setDefaultButton(btnEntrar);
		
		
		//mostra a Dialog
		fDialog.setTitle("Login SCC");
		fDialog.pack();
		fDialog.setLocationRelativeTo(null);
		fDialog.setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);
		fDialog.setVisible(true);
		
	}//fim do construtor


	public Login pegaDados (Login l){
		String usuario = txtUsuario.getText();
		
		l.setUsuario(usuario);
		return l;
		
		
	}


	public String getTxtUsuario() {
		String txtUsuario2 = txtUsuario.getText();
		return txtUsuario2;
	}


	public void setTxtUsuario(JTextField txtUsuario) {
		this.txtUsuario = txtUsuario;
	}
	
	 
}//fim da classe
 

Po galera… me dá essa força ae!!! :smiley:
Desde já agradeço muito pela ajuda ae!!
Abração a todos!!!

Oi,

RECURSIVIDADE, cuidado com ela!!!

Você tá chamando o construtor padrão dentro dele mesmo, isso tá levando ao estouro da pilha.

André, em geral isso ocorre quando vc tem uma chamada recursiva em algum lugar, algum looping doido.E esse construtor aí com tudo anexado pode ser a resposta.

public TelaLogin (){   
  
                   tela = new TelaLogin(); //toda vez que tento isso ele me vem com o StackOverFlow!!!!!   
                   }   

Olá amigo!!!
Primeiramente valeu mesmo pela atenção aee!!!
Po cara… se poderia mostar ae no código em que parte to fazendo errado??
Num to conseguindo ver aonde!!
Brigadão amigão!!

Amigos retirei a parte do código que o amigo mencionou acime do meu construtor…
SEm criar um novo objeto da tela ele não dá o erro… mas toda vez que crio o objeto seja em qualquer lugar ele acusa o erro!!
Valeu pela atenção amigos!!

Amigos retirei a parte do código que o amigo mencionou acime do meu construtor…
SEm criar um novo objeto da tela ele não dá o erro… mas toda vez que crio o objeto seja em qualquer lugar ele acusa o erro!!
Valeu pela atenção amigos!!

Acredito que você tenha postado o codigo errado, e que o correto seja:

public ControleLogin() { tela = new TelaLogin(); }

Nesse caso, você está errando porque você está criando uma instância de TelaLogin dentro do construtor de ControleLogin, e está criando uma instância de ControleLogin dentro do construtor de TelaLogin, isso vai gerar um loop infinito, veja:

public ControleLogin() { tela = new TelaLogin(); }

public TelaLogin(){ ControleLogin controle = new ControleLogin(); }

Quando o construtor de ControleLogin for chamado, ele vai chamar o construtor de TelaLogin, que por sua vez chamará o construtor de ControleLogin, que por sua vez chama o construtor de TelaLogin, que por sua vez… bom acho que já deu pra entender né! :roll:

Veja a pilha:

new ControleLogin() new TelaLogin() new ControleLogin() new TelaLogin() new ControleLogin() new TelaLogin() ...

Aproveitando, talvez o que você queira seja isso:

[code]public TelaLogin(ControleLogin controle){

fDialog = new JDialog(pFrame, true);
//…
}[/code]

public ControleLogin() { tela = new TelaLogin(this); }

Só para ajudar…

[quote=jairelton]Aproveitando, talvez o que você queira seja isso:

[code]public TelaLogin(ControleLogin controle){

fDialog = new JDialog(pFrame, true);
//…
}[/code][/quote]

Linhas 39 a 42 do segundo arquivo

[quote=jairelton]

public ControleLogin() { tela = new TelaLogin(this); }[/quote]

Linha 21 a 23 no primeiro arquivo,…

Olá galera!!!
Po jairelton valeu mesmo ae!!!
Consegui resolver o problema do OverFlow!!!
Mas agora me surgiu outro problema… .se possível me ajuda ae galera!!
Tipo…Tenho que pegar as informações que o cara digitou em um textField e depois setar minha classe modelo para poder realizar a consulta no banco…Mas toda vez que tento fazer a consulta o meu objeto volta nulo e me dá o erro de nullPointerException!!!

Segue meu código da tela… corrigido sem o overFlow!! [code]

package visao;

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.Insets;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JRootPane;
import javax.swing.JTextField;

import controle.ControleLogin;

public class TelaLogin {
private JFrame pFrame;
private JDialog fDialog;
private JLabel lblUsuario;
private JLabel lblSenha;
private JTextField txtUsuario;
private JPasswordField pswSenha;
private Container c;
private JPanel pNorte;
private JPanel pCentro;
private JPanel pCampos;
private JPanel pBotoes;
private JPanel pImagem;

 private String usuario;
 
public TelaLogin(ControleLogin controle){
	
	
	//constroi o dialog
	fDialog = new JDialog(pFrame, true);
			
	//cria componentes
	c = fDialog.getContentPane();
	c.setLayout(new BorderLayout());
	pNorte = new JPanel(new FlowLayout(FlowLayout.CENTER));
	pBotoes = new JPanel(new GridLayout(1,2,20,5));
	pCentro = new JPanel( new FlowLayout(FlowLayout.CENTER));
	
	GridBagConstraints gc = new GridBagConstraints();
	//distancia em comprimento dos componetes
	gc.ipadx = 10;
	//alinhamento de componentes
	gc.anchor = GridBagConstraints.FIRST_LINE_START;
	//distancia das bordas dos componetes
	gc.insets = new Insets(5,5,2,2);
	
	
	pCampos = new JPanel(new GridBagLayout());
	pImagem = new JPanel(new GridBagLayout());
	
	lblUsuario = new JLabel("Usuário");
	txtUsuario = new JTextField(20);
	txtUsuario.setToolTipText("Digite seu nome de usuário no sistema");
	usuario = txtUsuario.getText();
	
	lblSenha = new JLabel("Senha");
	pswSenha = new JPasswordField(20);
	pswSenha.setToolTipText("Digite sua senha no sistema");
	JButton btnEntrar = new JButton("Entrar");
	btnEntrar.setIcon(new ImageIcon("icIr.png"));
	btnEntrar.setToolTipText("Clique aqui para realizar o Login no sistema!");
	JButton btnCancelar = new JButton("Cancelar");
	btnCancelar.setIcon(new ImageIcon("icCancelar.png"));
	
	//relaciona nome do componente ao evento.
	btnEntrar.setActionCommand("entrar");
	btnCancelar.setActionCommand("cancelar");
	
	//cria a imagem e o texto de bem-vindo
	JLabel lb = new JLabel();
	lb.setIcon(new ImageIcon("login.png"));
	JLabel texto = new JLabel("<html><center>Seja bem-vindo ao sistema.<br>Por favor, insira seu login e<br>senha. Se você não possui<br>login e senha, por favor,<br>contate o administrador.<br><br><br></center></html>");
	texto.setFont(new Font("Arial",1,16));
	lb.setOpaque(false);
	
	//adicionando componentes no gridBagLayout
	gc.gridx = 0;
	gc.gridy = 1;
	pCampos.add(lblUsuario,gc);
	gc.gridx = 1;
	gc.gridy = 1;
	pCampos.add(txtUsuario,gc);
	gc.gridx = 0;
	gc.gridy = 2;
	pCampos.add(lblSenha,gc);
	gc.gridx = 1;
	gc.gridy = 2;
	pCampos.add(pswSenha,gc);
	gc.gridx = 0;
	gc.gridy = 0;
	gc.gridwidth=2;
	gc.fill = GridBagConstraints.HORIZONTAL;
	pCampos.add(texto,gc);
	gc.gridx = 0;
	gc.gridy = 0;
	gc.gridwidth=0;
	gc.fill=0;
	pImagem.add(lb,gc);
	
	//adiciona componentes ao gridlayout
	pBotoes.add(btnEntrar);
	pBotoes.add(btnCancelar);
	
	//adiciona componentes ao container.
	pNorte.add(pImagem);
	pNorte.add(pCampos);
	pCentro.add(pBotoes);
	c.add(pNorte,BorderLayout.NORTH);
	c.add(pCentro,BorderLayout.CENTER);
	
	//adiciona ouvintes nos componentes
	btnEntrar.addActionListener(controle);
	btnCancelar.addActionListener(controle);
	
	//faz o botão entrar ser o padrão
	btnEntrar.setDefaultCapable(true);
	JRootPane rp = fDialog.getRootPane();
	rp.setDefaultButton(btnEntrar);
	
	
	//mostra a Dialog
	fDialog.setTitle("Login SCC");
	fDialog.pack();
	fDialog.setLocationRelativeTo(null);
	fDialog.setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);
	fDialog.setVisible(true);
	
	
}//fim do construtor




public String pegaDados (){
	usuario = txtUsuario.getText();
	//fiz o seguitne código mas ele não está pegando as informações do txtUsuario... não sei por que!!?!?!??!
	return usuario;
	
	
}





public void mostra() {
	JOptionPane.showMessageDialog(null,"NOME :"+usuario);
}

}//fim da classe

[/code]

O código do meu controle… também sem o erro de overFlow galera! [code]package controle;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JOptionPane;

import modelo.Login;
import visao.TelaLogin;
import dao.DAOFactory;
import dao.DAOLogin;

public class ControleLogin implements ActionListener{

 DAOFactory df=DAOFactory.getDAOFactory(DAOFactory.POSTGRES);
 DAOLogin dao = df.getDAOLogin();

 private TelaLogin  tela;
 

public ControleLogin(){
	
	tela = new TelaLogin(this);
}

 public void actionPerformed(ActionEvent evt) {
	
	String comando = evt.getActionCommand();
	
	if (comando.equals("entrar")){
		try{
		Login l = new Login();
		l.setUsuario(tela.pegaDados());
		dao.consultar(l);
		if (l.getUsuario()!= null){
			JOptionPane.showMessageDialog (null, "Suuuuuucesso!");
		}
		JOptionPane.showMessageDialog(null, "ERRO");
	}

catch (Exception e){

	JOptionPane.showMessageDialog (null, "ERRO :" +e);
	
		}
	}
}

}
[/code]

Me ajuda aeeee!!!
Um abraço a todos!!!

Fala galera…
Bom consegui consertar o erro de overFlow galera… por isso mudei o nome do tópico ae pra ver se ajuda mais alguém ae do fórum… Vou postar o código correto pra que se algum amigo precisar possa analisar!!!
Preciso de mais alguma ajuda mas o assunto não é relaciona a esse tema!!
Agradeço a todos!!

[code]package controle;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JOptionPane;

import modelo.Login;
import visao.TelaLogin;
import dao.DAOFactory;
import dao.DAOLogin;

public class ControleLogin implements ActionListener{

 DAOFactory df=DAOFactory.getDAOFactory(DAOFactory.POSTGRES);
 DAOLogin dao = df.getDAOLogin();
 private ControleLogin controle;
 private TelaLogin  tela ;

 

public ControleLogin(){
	
	tela = new TelaLogin(this);
}

 public void actionPerformed(ActionEvent evt) {
	
	String comando = evt.getActionCommand();
	
	if (comando.equals("entrar")){
		try{
		JOptionPane.showMessageDialog (null, "Nome :"+tela.pegaDados());
		Login l = new Login();
		l.setUsuario(tela.pegaDados());
		dao.consultar(l);
		if (l.getUsuario()!= null){
			JOptionPane.showMessageDialog (null, "Suuuuuucesso!");
		}
		JOptionPane.showMessageDialog(null, "ERRO");
	}

catch (Exception e){

	JOptionPane.showMessageDialog (null, "ERRO :" +e);
	
		}
	}
	
	if (comando.equals("cancelar")){
		try{
		tela.fechar();
	}
		
		catch (Exception e){
			JOptionPane.showMessageDialog(null,"ERRO :"+e);}
		}
}

}
[/code]

[code]package visao;

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.Insets;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JRootPane;
import javax.swing.JTextField;

import controle.ControleLogin;

public class TelaLogin extends JFrame{
private JFrame pFrame;
private JDialog fDialog;
private JLabel lblUsuario;
private JLabel lblSenha;
private JTextField txtUsuario;
private JPasswordField pswSenha;
private Container c;
private JPanel pNorte;
private JPanel pCentro;
private JPanel pCampos;
private JPanel pBotoes;
private JPanel pImagem;
private TelaLogin tela;

 private String usuario;
 
public TelaLogin(ControleLogin controle){
	
	
	//constroi o dialog
	fDialog = new JDialog(pFrame, true);
			
	//cria componentes
	c = fDialog.getContentPane();
	c.setLayout(new BorderLayout());
	pNorte = new JPanel(new FlowLayout(FlowLayout.CENTER));
	pBotoes = new JPanel(new GridLayout(1,2,20,5));
	pCentro = new JPanel( new FlowLayout(FlowLayout.CENTER));
	
	GridBagConstraints gc = new GridBagConstraints();
	//distancia em comprimento dos componetes
	gc.ipadx = 10;
	//alinhamento de componentes
	gc.anchor = GridBagConstraints.FIRST_LINE_START;
	//distancia das bordas dos componetes
	gc.insets = new Insets(5,5,2,2);
	
	
	pCampos = new JPanel(new GridBagLayout());
	pImagem = new JPanel(new GridBagLayout());
	
	lblUsuario = new JLabel("Usuário");
	txtUsuario = new JTextField(20);
	txtUsuario.setToolTipText("Digite seu nome de usuário no sistema");
	usuario = txtUsuario.getText();
	
	lblSenha = new JLabel("Senha");
	pswSenha = new JPasswordField(20);
	pswSenha.setToolTipText("Digite sua senha no sistema");
	JButton btnEntrar = new JButton("Entrar");
	btnEntrar.setIcon(new ImageIcon("icIr.png"));
	btnEntrar.setToolTipText("Clique aqui para realizar o Login no sistema!");
	JButton btnCancelar = new JButton("Cancelar");
	btnCancelar.setIcon(new ImageIcon("icCancelar.png"));
	
	//relaciona nome do componente ao evento.
	btnEntrar.setActionCommand("entrar");
	btnCancelar.setActionCommand("cancelar");
	
	//cria a imagem e o texto de bem-vindo
	JLabel lb = new JLabel();
	lb.setIcon(new ImageIcon("login.png"));
	JLabel texto = new JLabel("<html><center>Seja bem-vindo ao sistema.<br>Por favor, insira seu login e<br>senha. Se você não possui<br>login e senha, por favor,<br>contate o administrador.<br><br><br></center></html>");
	texto.setFont(new Font("Arial",1,16));
	lb.setOpaque(false);
	
	//adicionando componentes no gridBagLayout
	gc.gridx = 0;
	gc.gridy = 1;
	pCampos.add(lblUsuario,gc);
	gc.gridx = 1;
	gc.gridy = 1;
	pCampos.add(txtUsuario,gc);
	gc.gridx = 0;
	gc.gridy = 2;
	pCampos.add(lblSenha,gc);
	gc.gridx = 1;
	gc.gridy = 2;
	pCampos.add(pswSenha,gc);
	gc.gridx = 0;
	gc.gridy = 0;
	gc.gridwidth=2;
	gc.fill = GridBagConstraints.HORIZONTAL;
	pCampos.add(texto,gc);
	gc.gridx = 0;
	gc.gridy = 0;
	gc.gridwidth=0;
	gc.fill=0;
	pImagem.add(lb,gc);
	
	//adiciona componentes ao gridlayout
	pBotoes.add(btnEntrar);
	pBotoes.add(btnCancelar);
	
	//adiciona componentes ao container.
	pNorte.add(pImagem);
	pNorte.add(pCampos);
	pCentro.add(pBotoes);
	c.add(pNorte,BorderLayout.NORTH);
	c.add(pCentro,BorderLayout.CENTER);
	
	//adiciona ouvintes nos componentes
	btnEntrar.addActionListener(controle);
	btnCancelar.addActionListener(controle);
	
	//faz o botão entrar ser o padrão
	btnEntrar.setDefaultCapable(true);
	JRootPane rp = fDialog.getRootPane();
	rp.setDefaultButton(btnEntrar);
	
	
	//mostra a Dialog
	fDialog.setTitle("Login SCC");
	fDialog.pack();
	fDialog.setLocationRelativeTo(null);
	fDialog.setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);
	fDialog.setVisible(true);
	
	
}//fim do construtor




public String pegaDados (){
	usuario = txtUsuario.getText();
	return usuario;
	
}


public void fechar (){
	fDialog.dispose();
	
}


public void mostra() {
	JOptionPane.showMessageDialog(null,"NOME :"+usuario);
}

}//fim da classe

[/code]