java.lang.NullPointerException(Resolvido)

Bom dia Galera, estou com este erro de java.lang.NullPointerException.

Estou criando um sistema Java simples, criei uma tela principal, com uma barra de menus contendo três opções(Cadastro, Lançamentos e Relatorios), neste momento apenas um destes menus(Cadastros) tem um itemMenu(Cadastro de Cliente).

Imagem da Tela Principal:

Código da Tela Principal:

package br.com.fjsistemas.visao;

import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.JDesktopPane;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JMenuItem;
import java.awt.event.ActionListener;
import java.text.ParseException;
import java.awt.event.ActionEvent;

public class TelaPrincipal extends JFrame {

	private static final long serialVersionUID = -4342792493676127358L;
	private JPanel contentPane;
	JDesktopPane desktopPane = new JDesktopPane();

	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					TelaPrincipal frame = new TelaPrincipal();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	public TelaPrincipal() {
		setTitle("FJSistemas");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 450, 300);
		setExtendedState(MAXIMIZED_BOTH);
		
		JMenuBar barraDeMenus = new JMenuBar();
		setJMenuBar(barraDeMenus);
		
		JMenu jMenuCadastro = new JMenu("Cadastros");
		barraDeMenus.add(jMenuCadastro);
		
		JMenuItem jMenuItem = new JMenuItem("Cadastro de Clientes");
		jMenuItem.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				CadastroCliente cliente = null;
				try {
					cliente = new CadastroCliente();
				} catch (ParseException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				desktopPane.add(cliente);
				cliente.centralizar();
				cliente.setVisible(true);
			}
		});
		jMenuCadastro.add(jMenuItem);
		
		JMenu jMenuLancamento = new JMenu("Lan\u00E7amentos");
		barraDeMenus.add(jMenuLancamento);
		
		JMenu jMenuRelatorio = new JMenu("Relatorio");
		barraDeMenus.add(jMenuRelatorio);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		contentPane.setLayout(new BorderLayout(0, 0));
		setContentPane(contentPane);
		
		
		contentPane.add(desktopPane, BorderLayout.CENTER);
	}
}

O erro ocorre no momento em que o usuario clica na opção Cadastro de Clientes(itemMenu).

Na JInternalFrame Cadastro de Clientes, há alguns botoes e campos, estes campos só deve estar “livres” para edição após om usuario clicar no botão novo (para cadastrar um cliente novo), ou seja, este formulario deve abrir com os campos desabilitados para edição, abrindo somente ao clicar no botao Novo.

Para isto acontecer eu criei um metodo, porem foi a partir deste metodo que ocorreu o erro, e eu gostaria de primeiro entender o pq do erro, e segundo como consertar o problema.

Formulario Cadastro de Cliente

Código do Formulario Cadastro Cliente

package br.com.fjsistemas.visao;

import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.ParseException;

import javax.swing.DefaultComboBoxModel;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFormattedTextField;
import javax.swing.JInternalFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.border.TitledBorder;
import javax.swing.text.MaskFormatter;

public class CadastroCliente extends JInternalFrame {

	private static final long serialVersionUID = 7774618585387230052L;

	public JTextField txtClienteNome;
	public JTextField txtClienteID;
	public JTextField txtClienteEndereco;
	public JTextField txtClienteNumero;
	public JTextField txtClienteBairro;
	public JTextField txtClienteCidade;
	public JTextField txtClienteEmail;
	public JTextField txtClienteCampoPesquisa;

	JButton botaoNovo = new JButton("Novo");
	JButton botaoAlterar = new JButton("Alterar");
	JButton botaoSalvar = new JButton("Salvar");
	JButton botaoExcluir = new JButton("Excluir");
	JButton botaoCancelar = new JButton("Cancelar");
	JButton botaoFechar = new JButton("Fechar");

	@SuppressWarnings("rawtypes")
	JComboBox comboBoxClienteEstado = new JComboBox();

	@SuppressWarnings("rawtypes")
	JComboBox comboBoxClienteSexo = new JComboBox();

	JFormattedTextField formatterTxtDataNascimento = new JFormattedTextField(new MaskFormatter("##/##/####"));
	JFormattedTextField txtFormatterClienteCPF = new JFormattedTextField(new MaskFormatter("###.###.###-##"));
	JFormattedTextField txtFormatterClienteRG = new JFormattedTextField(new MaskFormatter("##.###.###-#"));
	JFormattedTextField txtFormatterClienteCEP = new JFormattedTextField(new MaskFormatter("#####-###"));
	JFormattedTextField txtFormatterTelefone = new JFormattedTextField(new MaskFormatter("(##) ####-####"));
	JFormattedTextField txtFormatterClienteCelular = new JFormattedTextField(new MaskFormatter("(##) #####-####"));

	@SuppressWarnings({ "unchecked", "rawtypes" })
	public CadastroCliente() throws ParseException {

		setClosable(true);
		setBounds(100, 100, 924, 671);
		setTitle("Cadastro de Clientes");
		getContentPane().setLayout(null);

		habilitarBotoes(true);
		habilitarCampos(false);

		JPanel panelBotoes = new JPanel();
		panelBotoes.setBounds(10, 11, 888, 33);
		getContentPane().add(panelBotoes);

		botaoNovo.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				habilitarBotoes(false);
			}
		});
		panelBotoes.add(botaoNovo);

		botaoAlterar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				habilitarBotoes(false);
			}
		});
		panelBotoes.add(botaoAlterar);

		botaoSalvar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				habilitarBotoes(true);
			}
		});

		botaoExcluir.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				habilitarBotoes(false);
			}
		});
		panelBotoes.add(botaoExcluir);
		panelBotoes.add(botaoSalvar);

		botaoCancelar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				habilitarBotoes(true);
			}
		});
		panelBotoes.add(botaoCancelar);

		botaoFechar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				dispose();
			}
		});
		panelBotoes.add(botaoFechar);

		JPanel panelCamposFormulario = new JPanel();
		panelCamposFormulario.setBorder(
				new TitledBorder(null, "Dados do Cliente", TitledBorder.LEADING, TitledBorder.TOP, null, null));
		panelCamposFormulario.setBounds(10, 55, 888, 184);
		getContentPane().add(panelCamposFormulario);
		panelCamposFormulario.setLayout(null);

		JLabel labelClienteNome = new JLabel("Nome:");
		labelClienteNome.setBounds(10, 58, 46, 14);
		panelCamposFormulario.add(labelClienteNome);

		txtClienteNome = new JTextField();
		txtClienteNome.setBounds(50, 55, 250, 20);
		panelCamposFormulario.add(txtClienteNome);
		txtClienteNome.setColumns(10);

		JLabel labelClienteID = new JLabel("ID:");
		labelClienteID.setBounds(10, 26, 46, 14);
		panelCamposFormulario.add(labelClienteID);

		txtClienteID = new JTextField();
		txtClienteID.setBounds(50, 23, 86, 20);
		txtClienteID.setEditable(false);
		panelCamposFormulario.add(txtClienteID);
		txtClienteID.setColumns(10);

		JLabel labelClienteSexo = new JLabel("Sexo:");
		labelClienteSexo.setBounds(310, 58, 46, 14);
		panelCamposFormulario.add(labelClienteSexo);

		comboBoxClienteSexo.setModel(new DefaultComboBoxModel(new String[] { "Selecione", "Masculino", "Feminino" }));
		comboBoxClienteSexo.setBounds(350, 54, 128, 22);
		panelCamposFormulario.add(comboBoxClienteSexo);

		JLabel labelClienteDataNascimento = new JLabel("Data de Nascimento:");
		labelClienteDataNascimento.setBounds(488, 58, 120, 14);
		panelCamposFormulario.add(labelClienteDataNascimento);

		formatterTxtDataNascimento.setBounds(615, 55, 70, 20);
		panelCamposFormulario.add(formatterTxtDataNascimento);

		JLabel labelClienteCPF = new JLabel("CPF:");
		labelClienteCPF.setBounds(695, 58, 46, 14);
		panelCamposFormulario.add(labelClienteCPF);

		txtFormatterClienteCPF.setBounds(724, 55, 100, 20);
		panelCamposFormulario.add(txtFormatterClienteCPF);

		txtFormatterClienteRG.setBounds(50, 89, 90, 20);
		panelCamposFormulario.add(txtFormatterClienteRG);

		JLabel labelClienteRG = new JLabel("RG:");
		labelClienteRG.setBounds(10, 92, 46, 14);
		panelCamposFormulario.add(labelClienteRG);

		JLabel labelClienteEndereco = new JLabel("Endere\u00E7o:");
		labelClienteEndereco.setBounds(150, 92, 70, 14);
		panelCamposFormulario.add(labelClienteEndereco);

		txtClienteEndereco = new JTextField();
		txtClienteEndereco.setBounds(220, 89, 260, 20);
		panelCamposFormulario.add(txtClienteEndereco);
		txtClienteEndereco.setColumns(10);

		JLabel labelClienteNumero = new JLabel("N\u00BA:");
		labelClienteNumero.setBounds(488, 92, 46, 14);
		panelCamposFormulario.add(labelClienteNumero);

		txtClienteNumero = new JTextField();
		txtClienteNumero.setBounds(510, 89, 80, 20);
		panelCamposFormulario.add(txtClienteNumero);
		txtClienteNumero.setColumns(10);

		JLabel labelClienteBairro = new JLabel("Bairro:");
		labelClienteBairro.setBounds(615, 92, 46, 14);
		panelCamposFormulario.add(labelClienteBairro);

		txtClienteBairro = new JTextField();
		txtClienteBairro.setBounds(658, 89, 166, 20);
		panelCamposFormulario.add(txtClienteBairro);
		txtClienteBairro.setColumns(10);

		txtFormatterClienteCEP.setBounds(50, 120, 86, 20);
		panelCamposFormulario.add(txtFormatterClienteCEP);

		JLabel labelClienteCEP = new JLabel("CEP:");
		labelClienteCEP.setBounds(10, 123, 46, 14);
		panelCamposFormulario.add(labelClienteCEP);

		JLabel labelClienteCidade = new JLabel("Cidade:");
		labelClienteCidade.setBounds(150, 123, 46, 14);
		panelCamposFormulario.add(labelClienteCidade);

		txtClienteCidade = new JTextField();
		txtClienteCidade.setBounds(220, 120, 260, 20);
		panelCamposFormulario.add(txtClienteCidade);
		txtClienteCidade.setColumns(10);

		JLabel labelClienteEstado = new JLabel("Estado:");
		labelClienteEstado.setBounds(488, 123, 46, 14);
		panelCamposFormulario.add(labelClienteEstado);

		comboBoxClienteEstado.setModel(new DefaultComboBoxModel(new String[] { "Selecione", "Acre (AC)", "Alagoas (AL)",
				"Amap\u00E1 (AP)", "Amazonas (AM)", "Bahia (BA)", "Cear\u00E1 (CE)", "Distrito Federal (DF)",
				"Esp\u00EDrito Santo (ES)", "Goi\u00E1s (GO)", "Maranh\u00E3o (MA)", "Mato Grosso (MT)",
				"Mato Grosso do Sul (MS)", "Minas Gerais (MG)", "Par\u00E1 (PA)", "Para\u00EDba (PB)",
				"Paran\u00E1 (PR)", "Pernambuco (PE)", "Piau\u00ED (PI)", "Rio de Janeiro (RJ)",
				"Rio Grande do Norte (RN)", "Rio Grande do Sul (RS)", "Rond\u00F4nia (RO)", "Roraima (RR)",
				"Santa Catarina (SC)", "S\u00E3o Paulo (SP)", "Sergipe (SE)", "Tocantins (TO)" }));
		comboBoxClienteEstado.setBounds(540, 120, 130, 22);
		panelCamposFormulario.add(comboBoxClienteEstado);

		JLabel labelClienteTelefone = new JLabel("Fone:");
		labelClienteTelefone.setBounds(680, 123, 46, 14);
		panelCamposFormulario.add(labelClienteTelefone);

		txtFormatterTelefone.setBounds(719, 120, 105, 20);
		panelCamposFormulario.add(txtFormatterTelefone);

		txtFormatterClienteCelular.setBounds(50, 151, 105, 20);
		panelCamposFormulario.add(txtFormatterClienteCelular);

		JLabel labelClienteCelular = new JLabel("Cel:");
		labelClienteCelular.setBounds(10, 154, 46, 14);
		panelCamposFormulario.add(labelClienteCelular);

		JLabel labelClienteEmail = new JLabel("E-mail:");
		labelClienteEmail.setBounds(165, 154, 46, 14);
		panelCamposFormulario.add(labelClienteEmail);

		txtClienteEmail = new JTextField();
		txtClienteEmail.setBounds(220, 151, 604, 20);
		panelCamposFormulario.add(txtClienteEmail);
		txtClienteEmail.setColumns(10);

		JPanel panel = new JPanel();
		panel.setBorder(new TitledBorder(null, "Consultar Cliente", TitledBorder.CENTER, TitledBorder.TOP, null, null));
		panel.setBounds(10, 250, 888, 380);
		getContentPane().add(panel);
		panel.setLayout(null);

		JLabel labelClienteConsultar = new JLabel("Pesquisar:");
		labelClienteConsultar.setBounds(10, 27, 77, 14);
		panel.add(labelClienteConsultar);

		txtClienteCampoPesquisa = new JTextField();
		txtClienteCampoPesquisa.setBounds(85, 24, 793, 20);
		panel.add(txtClienteCampoPesquisa);
		txtClienteCampoPesquisa.setColumns(10);

	}

	public void centralizar() {
		Dimension thisSize = getSize();
		Dimension deskSize = getDesktopPane().getSize();
		int x = (deskSize.width - thisSize.width) / 2;
		int y = (deskSize.height - thisSize.height) / 2;
		setLocation(x, y);
	}

	public void habilitarBotoes(boolean estado) {
		botaoNovo.setEnabled(estado);
		botaoAlterar.setEnabled(estado);
		botaoExcluir.setEnabled(estado);
		botaoSalvar.setEnabled(!estado);
		botaoCancelar.setEnabled(!estado);
	}

	
	 public void habilitarCampos(boolean estadoCampos) {
		 txtClienteNome.setEnabled(estadoCampos);
		 comboBoxClienteSexo.setEnabled(estadoCampos);
		 formatterTxtDataNascimento.setEnabled(estadoCampos);
		 txtFormatterClienteCPF.setEnabled(estadoCampos);
		 txtFormatterClienteRG.setEnabled(estadoCampos);
		 txtClienteEndereco.setEnabled(estadoCampos);
		 txtClienteNumero.setEnabled(estadoCampos);
		 txtClienteBairro.setEnabled(estadoCampos);
		 txtFormatterClienteCEP.setEnabled(estadoCampos);
		 txtClienteCidade.setEnabled(estadoCampos);
		 comboBoxClienteEstado.setEnabled(estadoCampos);
		 txtFormatterTelefone.setEnabled(estadoCampos);
		 txtFormatterClienteCelular.setEnabled(estadoCampos);
		 txtClienteEmail.setEnabled(estadoCampos); }
	 
}

Erro Apresentado:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
	at br.com.fjsistemas.visao.CadastroCliente.habilitarCampos(CadastroCliente.java:279)
	at br.com.fjsistemas.visao.CadastroCliente.<init>(CadastroCliente.java:61)
	at br.com.fjsistemas.visao.TelaPrincipal$2.actionPerformed(TelaPrincipal.java:53)
	at java.desktop/javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1967)
	at java.desktop/javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2308)
	at java.desktop/javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:405)
	at java.desktop/javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:262)
	at java.desktop/javax.swing.AbstractButton.doClick(AbstractButton.java:369)
	at java.desktop/javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:1020)
	at java.desktop/javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(BasicMenuItemUI.java:1064)
	at java.desktop/java.awt.Component.processMouseEvent(Component.java:6632)
	at java.desktop/javax.swing.JComponent.processMouseEvent(JComponent.java:3342)
	at java.desktop/java.awt.Component.processEvent(Component.java:6397)
	at java.desktop/java.awt.Container.processEvent(Container.java:2263)
	at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:5008)
	at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2321)
	at java.desktop/java.awt.Component.dispatchEvent(Component.java:4840)
	at java.desktop/java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4918)
	at java.desktop/java.awt.LightweightDispatcher.processMouseEvent(Container.java:4547)
	at java.desktop/java.awt.LightweightDispatcher.dispatchEvent(Container.java:4488)
	at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2307)
	at java.desktop/java.awt.Window.dispatchEventImpl(Window.java:2772)
	at java.desktop/java.awt.Component.dispatchEvent(Component.java:4840)
	at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:772)
	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:715)
	at java.base/java.security.AccessController.doPrivileged(Native Method)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:95)
	at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:745)
	at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:743)
	at java.base/java.security.AccessController.doPrivileged(Native Method)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
	at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:742)
	at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
	at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)

Observação:

Se eu deixo o metodo habilitarCampos() comentado, todo o sistema passa a funcionar corretamente

Você está chamando o método habilitarCampos() antes de criar os elementos (JTextFields) que ele controla.

Teste colocar o habilitarCampos() após a criação de todos os elementos (no fim do construtor).

Abraço.

1 curtida

@TerraSkilll

os JtextFields estão criados logo no começo do JIternalFrame:

public class CadastroCliente extends JInternalFrame {

	private static final long serialVersionUID = 7774618585387230052L;

	public JTextField txtClienteNome;
	public JTextField txtClienteID;
	public JTextField txtClienteEndereco;
	public JTextField txtClienteNumero;
	public JTextField txtClienteBairro;
	public JTextField txtClienteCidade;
	public JTextField txtClienteEmail;
	public JTextField txtClienteCampoPesquisa;

	JButton botaoNovo = new JButton("Novo");
	JButton botaoAlterar = new JButton("Alterar");
	JButton botaoSalvar = new JButton("Salvar");
	JButton botaoExcluir = new JButton("Excluir");
	JButton botaoCancelar = new JButton("Cancelar");
	JButton botaoFechar = new JButton("Fechar");

e o metodo é o ultimo trecho de código da JInternalFrame

public void habilitarCampos(boolean estadoCampos) {
		 txtClienteNome.setEnabled(estadoCampos);
		 comboBoxClienteSexo.setEnabled(estadoCampos);
		 formatterTxtDataNascimento.setEnabled(estadoCampos);
		 txtFormatterClienteCPF.setEnabled(estadoCampos);
		 txtFormatterClienteRG.setEnabled(estadoCampos);
		 txtClienteEndereco.setEnabled(estadoCampos);
		 txtClienteNumero.setEnabled(estadoCampos);
		 txtClienteBairro.setEnabled(estadoCampos);
		 txtFormatterClienteCEP.setEnabled(estadoCampos);
		 txtClienteCidade.setEnabled(estadoCampos);
		 comboBoxClienteEstado.setEnabled(estadoCampos);
		 txtFormatterTelefone.setEnabled(estadoCampos);
		 txtFormatterClienteCelular.setEnabled(estadoCampos);
		 txtClienteEmail.setEnabled(estadoCampos); 
       }
	 
}

Na verdade o JTextFieldsstão sendo declarados no inicio da classe, mas eles só são criados dentro do construtor, depois de você chamar os métodos habilitarBotoes e habilitarCampos
.
A criação do objeto só acontece no momento que você usa a instrução new.

Para parar de dar erro, faça o que foi sugerido:
Chame os métodos habilitarBotoes e habilitarCampos no final do construtor do CadastroCliente.

1 curtida

Muito obrigado mais uma vez!!! @staroski

e muito obg a vc tbm @TerraSkilll