tentando migrar minha aplicação simploria de web para desktop, fiz uma tela pra inserir os dados no banco de dados… mais. recebo um nullPointer sem saber o motivo, segue o codigo…
package com.gui;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import com.dao.ClienteDAO;
import com.model.Cliente;
public class MontaUI {
private JFrame janela;
private JPanel principal;
private JTextField nome;
private JTextField sexo;
private JTextField telefone;
private JTextField rg;
private JTextField cpf;
private JTextField dataNascimento;
public static void main(String[] args) {
new MontaUI().montaTela();
}
public void montaTela(){
montaJanela();
montaPainelPrincipal();
montaEntrada();
montaBotaoAdicionar();
mostraJanela();
}
public void montaEntrada(){
nome = new JTextField("Nome");
sexo = new JTextField("Sexo");
telefone = new JTextField("Telefone");
rg = new JTextField("Rg");
cpf = new JTextField("CPF");
dataNascimento = new JTextField("Data de Nascimento");
}
public void montaPainelPrincipal(){
principal = new JPanel();
janela.add(principal);
}
public void montaJanela(){
janela = new JFrame("Cadastro Geral");
janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// na linha abaixo recebo a exception
principal.add(nome);
principal.add(sexo);
principal.add(telefone);
principal.add(rg);
principal.add(cpf);
principal.add(dataNascimento);
}
public void mostraJanela(){
janela.pack();
janela.setSize(700,700);
janela.setVisible(true);
}
private void montaBotaoAdicionar() {
JButton botaoCarregar = new JButton("Grava");
botaoCarregar.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
new ClienteDAO().adiciona(new Cliente(nome.getText(), sexo.getText(), telefone.getText(), rg.getText(), cpf.getText()));
}
});
principal.add(botaoCarregar);
}
}
Exception in thread “main” java.lang.NullPointerException
at com.gui.MontaUI.montaJanela(MontaUI.java:55)
at com.gui.MontaUI.montaTela(MontaUI.java:30)
at com.gui.MontaUI.main(MontaUI.java:26)
hum… realmente nao sei nada de swing ainda. essa é minha primeira aplicação… mas ainda recebo essa stack, mesmo mudando o que você disse.
Exception in thread “main” java.lang.NullPointerException
at com.gui.MontaUI.montaPainelPrincipal(MontaUI.java:47)
at com.gui.MontaUI.montaTela(MontaUI.java:30)
at com.gui.MontaUI.main(MontaUI.java:26)
Olha, eu acho que o problema esta no método public void montaJanela().
Neste método ele adiciona os jTextFields nome, sexo, telefone, rg, cpf e dataNascimento porém eles ainda não foram criados na memória, ou seja, estão nulos.
Acho que você tem que alterar o método montaTela() deixando assim:
public void montaTela(){
montaEntrada();
montaPainelPrincipal();
montaBotaoAdicionar();
montaJanela();
mostraJanela();
}
Ah e também tem que adicionar o jPanel principal ao jFrame no método montaJanela.
Ele vai iniciar lá de cima e vai criando os componentes em ordem. Quando chegar no filho, é de certeza que ele já existe, quando o pai adicionar também se sabe que o filho existe.
[code] public void montaPainelPrincipal(){
principal = new JPanel(); // crie o objeto JPanel aqui, se não ocorrerá o NullPointerException
principal.add(nome);
principal.add(sexo);
principal.add(telefone);
principal.add(rg);
principal.add(cpf);
principal.add(dataNascimento);
}
public void montaJanela(){
janela = new JFrame("Cadastro Geral");
// retire a linha abaixo, pois ele já foi criado no método montaPainelPrincipal
// principal = new JPanel();
janela.add(principal);
janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}[/code]
Mas acho que fica mais fácil de identificar os erros se fizer como o Daniels sugeriu, criando os getters para os componentes, assim cada método fica responsável pela inicialização de um componente.