Ajuda com GET

23 respostas
JuniorMcz

Bom dia Galera…

Estou com a seguinte duvida…

Tenho uma variável “NOME” do tipo String na class “X”
e nesta class “X” tem os metodos Get e Set desta variável…
Se colocar JOptionPane.showMessageDialog(null, getNOME());
ele mostra o resultado correto…
Entao ele armazenou corretamente.

Entao o problema e quando estou em outra class “Y”
e chamo o metodo get da class “X” ele esta trazendo nada… null na variavel.
Como se a variável estivesse vazia.

Qual é o procedimento para ele retornar os dados da class “X” para class “Y” ??

Valeu!!!

23 Respostas

claudneto

Vc fez o método get público, né?!

JuniorMcz

Eaeew Blz ?

sim fiz publico…

public String getNome() { return Nome; }

claudneto

Tenta fazer o import dessa classe na outra classe onde vc pretende chamar o método getNome().

Pode ser que resolva.

JuniorMcz

Ja fiz o import e nada, já tentei herdando e nada, na class “Y” já criei variáveis e na class “X” fiz um set para as variáveis e nada…
Estou tentando aqui mas não esta levando as informações da Classe “X” para Classe “Y”

claudneto:
Tenta fazer o import dessa classe na outra classe onde vc pretende chamar o método getNome().

Pode ser que resolva.

marcelo.bellissimo

Posta aí o trecho onde você está fazendo isso… você pode ter uma referência pra classe X na sua classe Y, mas você setou algum valor na variável Nome?

Se está null, é porque nada foi setado nela…

JuniorMcz

Na class "X"

Variável :
String Nome;

Metodos Get e Set :

public String getNome() {
        return Nome;
    }

    public void setNome(String Nome) {
        this.Nome = Nome;
    }
E no evento de um button esta pegando as informações nao JtextFiel:
setNome((txtLoggin.getText()));

Se nesta mesma class eu fizer a impressão do resultado como :

JOptionPane.showMessageDialog(null,getNome());

Imprimir o resultado correto..

Ja na Class "Y":
Em um evento quero que imprima o mesmo resultado do valor que deu na classe "X"

X x = new X();
        JOptionPane.showMessageDialog(null,x.getNome());
mas nao traz nada... quando estou depurando esta null o objeto nome... Ai eu pergunto, como pode esta null se eu armazenei as informações na class anterior ?!
marcelo.bellissimo:
Posta aí o trecho onde você está fazendo isso... você pode ter uma referência pra classe X na sua classe Y, mas você setou algum valor na variável Nome?

Se está null, é porque nada foi setado nela...

plim

X x = new X(); JOptionPane.showMessageDialog(null,x.getNome());

Pelo que vejo você está criando um novo objeto e tentando obter o atributo nome do novo objeto, não daquele que foi setado pelo evento, por isso que aparece null… Você precisa chamar o getNome() no mesmo objeto que atribuiu o valor para retorna-lo.

Se fizer um x.setNome(“Teste”) na classe Y vai mostrar “Teste”…

JuniorMcz

Estou chamando o x.getNome() da Class X na Class Y do mesmo objeto…
Para ele retorna o valor que foi atribuido na class X, e que seja mostrado na class Y
Entendeu ??

AJUDA…

plim:
X x = new X(); JOptionPane.showMessageDialog(null,x.getNome());

Pelo que vejo você está criando um novo objeto e tentando obter o atributo nome do novo objeto, não daquele que foi setado pelo evento, por isso que aparece null… Você precisa chamar o getNome() no mesmo objeto que atribuiu o valor para retorna-lo.

Se fizer um x.setNome(“Teste”) na classe Y vai mostrar “Teste”…

claudneto
setNome((txtLoggin.getText()));

Vc está chamando esse método de um objeto instanciado, certo?

No showMessageDialog vc precisa chamar o getNome() do mesmo objeto instanciado.

JOptionPane.showMessageDialog(null,x.getNome());

É isso que vc ta fazendo?

Quando for postar o código, posta inteiro pra gente ver. É bem mais fácil.

JuniorMcz

Olá…

Na Classe “X” onde recebo todas as informações estou fazendo assim :

Loggin x = new Loggin(); x.setNome(txtLoggin.getText());

E na Classe “Y” onde vou utilizar as informações da Classe “X” estou fazendo assim :

JOptionPane.showMessageDialog(null,getNome());

como vou chamar o getNome na classe “Y” do mesmo objeto que foi criado na classe “X” ?

claudneto:
setNome((txtLoggin.getText()));

Vc está chamando esse método de um objeto instanciado, certo?

No showMessageDialog vc precisa chamar o getNome() do mesmo objeto instanciado.

JOptionPane.showMessageDialog(null,x.getNome());

É isso que vc ta fazendo?

Quando for postar o código, posta inteiro pra gente ver. É bem mais fácil.

Andre_Fonseca

oi,

Em algum lugar da classe Y você terá que criar um objeto da classe X, quem sabe no construtor? onde normalmente ficam as inicializações de variáveis

classe X {
  String var=
  getVar() { return var;}
}

classe Y {
  
  classe Y() {
    X x = new X();
  }

  metodoY() {
    String var = x.getVar();
   }
JuniorMcz

Boa Noite..

Estou fazendo assim... mas mesmo assim esta trazendo null :(

André Fonseca:
oi,

Em algum lugar da classe Y você terá que criar um objeto da classe X, quem sabe no construtor? onde normalmente ficam as inicializações de variáveis

classe X {
  String var=
  getVar() { return var;}
}

classe Y {
  
  classe Y() {
    X x = new X();
  }

  metodoY() {
    String var = x.getVar();
   }
Andre_Fonseca

a inicialização do atributo tem que ser feita na classe Y e não na X (não se esqueça de instanciar o objeto X, pode ser no construtor de Y)

public class X {

	private String nome;

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

}
public class Y {

	private X x;
	
	public Y() {
		x = new X();
	}

	public void meuEvento() {
		x.setNome("Teste");
	}

	public X getX() {
		return x;
	}

}
public class Testa {

	public static void main(String[] args) {
		Y y = new Y();
		y.meuEvento();
		
		System.out.println(y.getX().getNome());
	}
}
claudneto

Vc está criando um objeto na classe X e querendo chamar O MESMO objeto na classe Y, correto?

Não tenho certeza se vai funcionar. Na classe X, eu criei um objeto estático e atualizei o valor dele. Na classe X, eu instanciei um objeto da classe X e chamei o atributo x (aquele objeto estático) e chamei o método getNome dele.

Testa ai pra ver se funciona. Na teoria funciona, na prática eu não sei pq não testei.

public class X {
	
	   static Loggin x;  
	   x.setNome(txtLoggin.getText());  
	
}

public class Y {
	
	X objetoX = new X;
	
	JOptionPane.showMessageDialog(null,objetoX.x.getNome());
}
Andre_Fonseca

Oi,

Cola o seu código aqui para que as outras pessoas ajudem

Acho que entendi o que você precisa agora, você quer pegar o usuário e senha que vai vir de um formulário e criar a conexão com o banco de dados certo?

Refatore o seu método que retorna uma conexão para ser estático

Não precisa guardar uma referência da classe login dentro dela mesma, é só usar o this

Na classe login você irá apenas pegar os valores do textbox e passar para a classe que recupera a conexão

Outra coisa, use nomes sugestivos para a sua variável para que alguém consiga entender seu código depois, e não a,b,c etc

public class Conexao {

	public static Connection getConexao(String usuario, String senha,
			String nomeDriver, String url) {
		Connection conn = null;

		try {
			Class.forName(nomeDriver);
			conn = DriverManager.getConnection(url, usuario, senha);
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}

		return conn;
	}
}
public class Login {

	String usuario;
	String senha;
	String nomeDriver;
	String url;
	
	void evento() {
		this.usuario = txtUsuario.getText();
		this.senha = txtSenha.getText();
		this.nomeDriver= "oracle.jdbc.driver.OracleDriver";
		this.url = "jdbc:firebirdsql://localhost:3050/";
		
		Connection conn = Conexao.getConexao(usuario, senha, nomeDriver, url);
	}
}
JuniorMcz
Na Classe de Loggin que pega todos os dados (Nome, Senha, Url)
public class Loggin extends javax.swing.JFrame {

    Banco bd;
    private  TelaPrincipal frmTelaPrincipal;
    private Loggin frmLoggin;
    String c = null;
    private String Nome,Senha,Url, Drive;

    public Loggin() {
         

        Color minhaCor = new Color(205, 214, 252);
        getContentPane().setBackground(minhaCor);
        initComponents();
    }

    public  String getNome() {
        return Nome;
    }

    public void setNome(String Nome) {
        this.Nome = Nome;
    }

    public   String getSenha() {
        return Senha;
    }

    public void setSenha(String Senha) {
        this.Senha = Senha;
    }

    public  String getUrl() {
        return Url;
    }

    public void setUrl(String Url) {
        this.Url = Url;
    }

private void jPasswordField1ActionPerformed(java.awt.event.ActionEvent evt) {                                                

        bd = new Banco();        

        while (c == null) {
            //Nome do Usuario de Banco
            bd.setUSERNAME(String.valueOf(txtLoggin.getText()));
            jPasswordField1.setVisible(true);

            //Senha do Banco
            String senha = new String(jPasswordField1.getPassword());
            bd.setPASSWORD(String.valueOf(senha));
            
            //Alias do Banco
            String a = "jdbc:firebirdsql://localhost:3050/";
            String b = txtAlias.getText();
            b = b.replace("\","//");
            bd.setURL(String.valueOf(a + b));            

            //Drive do Banco
            bd.setDRIVER("org.firebirdsql.jdbc.FBDriver");

            try {

                bd.conectar();                
                c = "ok";
                frmTelaPrincipal = new TelaPrincipal();
                frmTelaPrincipal.setVisible(true);
                dispose();
               
                setNome(txtLoggin.getText());
                setSenha(String.valueOf(senha));
                setUrl(String.valueOf(a + b));                

                bd.desconectar();

            } catch (Exception ex) {
                JOptionPane.showMessageDialog(null, " Falha na Conexão." + ex);
                break;
            }

        }
    }
A Classe do Banco de Dados, onde é feita a comunicação...
public class Banco {

    private String DRIVER;
    private String URL;
    private String USERNAME;
    private String PASSWORD;
    private Connection conn;
    


   
public Banco (){
        
        this.DRIVER = "org.firebirdsql.jdbc.FBDriver";
        this.URL = URL;
        this.USERNAME = USERNAME;
        this.PASSWORD = PASSWORD;
        this.conn = conn;


}

    public void  conectar() throws ClassNotFoundException, SQLException{

            Class.forName(this.DRIVER);
            this.conn = DriverManager.getConnection(URL,USERNAME,PASSWORD);
    }

Não entendi aonde que eu implemento este seu metodo....
Meu aplicativo esta todo funcional, queria implementar isto, porque, tem outras parte do aplicativo que precisa utilizar o banco de dados.
Então não precisa de informar novamente os dados de acesso e sim Pegar o que ja foi digitado na hora do loggin.
Pode me ajudar... Obg

Andre_Fonseca

oi,

o método que eu chamei de evento é o seu jPasswordField1ActionPerformed, altere o sua classe de Banco de Dados para fazer semelhante ao que eu coloquei…

PS: seria interessante você usar um pool de conexões ali, mas isso você pode fazer depois…

[]´s

JuniorMcz

Ok meu Brother... esta fazendo a conexão normalmente pela tela de loggin, mas o meu problema ainda nao foi sanado...
quando estou chamando uma outra classe que utiliza a conexão com banco de dados, não esta trazendo resgatando...

Na Classe de Loggin ficou assim :
Connection conn = bd.getConexao(getNome(),getSenha(),getDrive(),getUrl());
Na Classe do Banco ficou assim :
public static Connection getConexao(String usuario, String senha,String nomeDriver, String url) {
        Connection conn = null;
        try {
            Class.forName(nomeDriver);
            conn = DriverManager.getConnection(url, usuario, senha);
        } catch (ClassNotFoundException e) {
            JOptionPane.showMessageDialog(null, e);
        } catch (SQLException e) {
            JOptionPane.showMessageDialog(null, e);
        }
        return conn;
    }
E na Classe que estou precisando da comunicação do banco de dados esta assim :
public List<Parceiro> listar(boolean b) throws Exception {

        Banco bd = new Banco();
        Loggin lo = new Loggin();
        Connection conn = Banco.getConexao(lo.getNome(), lo.getSenha(), lo.getDrive(), lo.getUrl());

        String sql = "select * from cadparceiro order by nome";
        ResultSet res = bd.consultar(sql);
        List<Parceiro> parceiro = new ArrayList<Parceiro>();
        while (res.next()) {

            Parceiro c = new Parceiro();

            c.setCodigoParceiro(res.getInt("codigoparceiro"));
            c.setNome(res.getString("nome"));
            c.setEndereco(res.getString("endereco"));
            c.setComplemento(res.getString("complemento"));
            c.setTelefone(res.getString("telefone"));
            c.setCelular(res.getString("celular"));
            parceiro.add(c);
        }

        bd.desconectar();
        return parceiro;
    }

Esta dando point NullPointerException :(

Segue o erro :
[list]Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at tela.TelaPrincipal.jMenuItemExibirParceiro(TelaPrincipal.java:343)
at tela.TelaPrincipal.access$100(TelaPrincipal.java:12)
at tela.TelaPrincipal$2.actionPerformed(TelaPrincipal.java:133)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.AbstractButton.doClick(AbstractButton.java:357)
at javax.swing.AbstractButton.doClick(AbstractButton.java:337)
at javax.swing.plaf.basic.BasicMenuItemUI$Actions.actionPerformed(BasicMenuItemUI.java:1192)
at javax.swing.SwingUtilities.notifyAction(SwingUtilities.java:1633)
at javax.swing.JComponent.processKeyBinding(JComponent.java:2851)
at javax.swing.JMenuBar.processBindingForKeyStrokeRecursive(JMenuBar.java:670)
at javax.swing.JMenuBar.processBindingForKeyStrokeRecursive(JMenuBar.java:678)
at javax.swing.JMenuBar.processBindingForKeyStrokeRecursive(JMenuBar.java:678)
at javax.swing.JMenuBar.processBindingForKeyStrokeRecursive(JMenuBar.java:678)
at javax.swing.JMenuBar.processBindingForKeyStrokeRecursive(JMenuBar.java:678)
at javax.swing.JMenuBar.processKeyBinding(JMenuBar.java:649)
at javax.swing.KeyboardManager.fireBinding(KeyboardManager.java:267)
at javax.swing.KeyboardManager.fireKeyboardAction(KeyboardManager.java:254)
at javax.swing.JComponent.processKeyBindingsForAllComponents(JComponent.java:2928)
at javax.swing.SwingUtilities.processKeyBindings(SwingUtilities.java:1548)
at javax.swing.UIManager$2.postProcessKeyEvent(UIManager.java:1438)
at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(DefaultKeyboardFocusManager.java:722)
at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(DefaultKeyboardFocusManager.java:990)
at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:855)
at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:676)
at java.awt.Component.dispatchEventImpl(Component.java:4502)
at java.awt.Container.dispatchEventImpl(Container.java:2099)
at java.awt.Window.dispatchEventImpl(Window.java:2478)
at java.awt.Component.dispatchEvent(Component.java:4460)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
CONSTRUÍDO COM SUCESSO (tempo total: 18 segundos)[/list]

André Fonseca:
oi,

o método que eu chamei de evento é o seu jPasswordField1ActionPerformed, altere o sua classe de Banco de Dados para fazer semelhante ao que eu coloquei..

PS: seria interessante você usar um pool de conexões ali, mas isso você pode fazer depois..

[]´s

Andre_Fonseca

oi

Exception in thread “AWT-EventQueue-0” java.lang.NullPointerException
at tela.TelaPrincipal.jMenuItemExibirParceiro(TelaPrincipal.java:343)

Por favor, cole o código da classe TelaPrincipal, o problema está na linha mencionada acima

[]´s

JuniorMcz
A linha 343 da class TelaPrincipal é esta :
private void jMenuItemExibirParceiro(java.awt.event.ActionEvent evt) {                                         
        try {
            frmParceiroCadastrados = new ParceiroCadastrado();
        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, ex);
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(null, ex);
        }
        frmParceiroCadastrados.setVisible(true); //AQUI
Ai esta chamando a class como postei...
public List<Parceiro> listar(boolean b) throws Exception {  
  
        Banco bd = new Banco();  
        Loggin lo = new Loggin();  
        Connection conn = Banco.getConexao(lo.getNome(), lo.getSenha(), lo.getDrive(), lo.getUrl());  
  
        String sql = "select * from cadparceiro order by nome";  
        ResultSet res = bd.consultar(sql);  //ERRO DO NullPointerException 
        List<Parceiro> parceiro = new ArrayList<Parceiro>();  
        while (res.next()) {  
  
            Parceiro c = new Parceiro();  
  
            c.setCodigoParceiro(res.getInt("codigoparceiro"));  
            c.setNome(res.getString("nome"));  
            c.setEndereco(res.getString("endereco"));  
            c.setComplemento(res.getString("complemento"));  
            c.setTelefone(res.getString("telefone"));  
            c.setCelular(res.getString("celular"));  
            parceiro.add(c);  
        }  
  
        bd.desconectar();  
        return parceiro;  
    }

Como eu falei o erro esta dando quando estou tentando se conecta com os dados que já foi inserido na class loggin...
como nao conseguio se conectar com banco de dados... esta trazendo null...

Entendeu ?

André Fonseca:
oi
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException at tela.TelaPrincipal.jMenuItemExibirParceiro(TelaPrincipal.java:343)

Por favor, cole o código da classe TelaPrincipal, o problema está na linha mencionada acima

[]´s

Andre_Fonseca

ola,

Se o objeto Banco está diferente de nulo e o objeto sql também está diferente de nulo então o NullPointer está acontecendo dentro do método consultar, mas você não passou como está o método consultar

acho você está confundindo as coisas
o seu objeto Banco na verdade deve se chamar algo como FabricaConexao e possuir o método estático que eu falei (o ideal seria usar um pool de conexões)
você deve criar um DAO para fazer as consultas usando a conexão criada pelo objeto FabricaConexao
dê uma procurada no forum e leia sobre o assunto (fabrica de conexão e DAO)

No seu código deve ficar algo parecido com isso

Conection conn = FabricaConexao.getConexao(url, usuario, senha);

Dao dao = Dao(conn);

dao.consultarUsuarios();

Sugiro fortemente você baixar esta apostila e estudar um pouco os conceitos

JuniorMcz

Ok, André, já fiz o download da apostila... vou estudar dar uma estudada nela..

Mas meu codigo de consultar é este :
public ResultSet consultar(String sql) throws Exception {
		Statement s = this.conn.createStatement();
		return s.executeQuery(sql);
	}
que esta localizado na minha classe do banco de dados...
André Fonseca:
ola,

Se o objeto Banco está diferente de nulo e o objeto sql também está diferente de nulo então o NullPointer está acontecendo dentro do método consultar, mas você não passou como está o método consultar

acho você está confundindo as coisas
o seu objeto Banco na verdade deve se chamar algo como FabricaConexao e possuir o método estático que eu falei (o ideal seria usar um pool de conexões)
você deve criar um DAO para fazer as consultas usando a conexão criada pelo objeto FabricaConexao
dê uma procurada no forum e leia sobre o assunto (fabrica de conexão e DAO)

No seu código deve ficar algo parecido com isso

Conection conn = FabricaConexao.getConexao(url, usuario, senha);

Dao dao = Dao(conn);

dao.consultarUsuarios();

Sugiro fortemente você baixar esta apostila e estudar um pouco os conceitos

Andre_Fonseca

JuniorMcz:
Ok, André, já fiz o download da apostila… vou estudar dar uma estudada nela…

Mas meu codigo de consultar é este :

public ResultSet consultar(String sql) throws Exception { Statement s = this.conn.createStatement(); return s.executeQuery(sql); }
que esta localizado na minha classe do banco de dados…

Então, é como eu falei, a classe Fabrica de Conexões tem apenas uma responsabilidade que é Fabricar Conexões :slight_smile:

A sua classe DAO recebe uma conexão e faz a consulta no banco encapsulando detalhes de como esta consulta deve ser feita

No caso do seu código o método consultar tem que ir para uma classe DAO algo como ConsultarUsuariosDAO, e ele não acessa o this.conn, ele recupera da Fabrica e usa (acho que é por isso a causa do NullPointerException)

Dá uma lida na apostila, ela vai te ajudar a entender isso

Criado 10 de dezembro de 2010
Ultima resposta 16 de dez. de 2010
Respostas 23
Participantes 5