Problema ao enviar cadastro de funcionario

estou com um problema ao enviar os dados do funcionario da erro ao apertar o botao de enviar erro -> Exception in thread “AWT-EventQueue-0”

codigo da tela de cadastro de funcionario

package sistema.telas;

import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import java.text.ParseException;
import java.util.Locale;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFormattedTextField;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.text.MaskFormatter;
import sistema.BancoDeDados;
import sistema.Navegador;
import sistema.entidades.Cargo;
import sistema.entidades.Funcionario;

public class FuncionariosInserir extends JPanel {

	JLabel labelTitulo, labelNome, labelSobrenome, labelDataNascimento, labelEmail, labelCargo, labelSalario;
	JTextField campoNome, campoSobrenome, campoEmail;
	JFormattedTextField campoDataNascimento, campoSalario;
	JComboBox<Cargo> comboboxCargo;
	JButton botaoGravar;
	
	public FuncionariosInserir() {
		criarComponentes();
		criarEventos();
	}

	public void criarComponentes() {
		//Sem gerenciador de layout.
		setLayout(null);
	
		//Nas linhas  , Instanciamos os componentes da tela.
		labelTitulo = new JLabel("Cadastro de Funcionário", JLabel.CENTER);
		labelTitulo.setFont(new Font(labelTitulo.getFont().getName(), Font.PLAIN, 20));
		labelNome = new JLabel("Nome:", JLabel.LEFT);
		campoNome = new JTextField();
		labelSobrenome = new JLabel("Sobrenome:", JLabel.LEFT);
		campoSobrenome = new JTextField();
	
		//Nas linhas  , definimos uma máscara para o campo de data de nascimento.
		labelDataNascimento = new JLabel("Data de Nascimento", JLabel.LEFT);
		campoDataNascimento = new JFormattedTextField();
	
		try {
			MaskFormatter dateMask = new MaskFormatter("##/##/####");
			dateMask.install(campoDataNascimento);
		} catch (ParseException ex){
			Logger.getLogger(FuncionariosInserir.class.getName()).log(Level.SEVERE, null, ex);
		}
		labelEmail = new JLabel("E-mail", JLabel.LEFT);
		campoEmail = new JTextField();
		labelCargo = new JLabel("Cargo", JLabel.LEFT);
	
		//Na linha  , definimos o formato do campo de salário
		comboboxCargo = new JComboBox<Cargo>();
		labelSalario = new JLabel("Salário:", JLabel.LEFT);
		DecimalFormat formatter = new DecimalFormat("###0.00", new DecimalFormatSymbols(new Locale("pt", "BR")));
		JFormattedTextField campoSalario = new JFormattedTextField(formatter);
		campoSalario.setValue(0.00);
		botaoGravar = new JButton("Adicionar");
	
		//Nas linhas  ,definimos o posicionamento e o tamanho dos componentes na tela.
		labelTitulo.setBounds(20, 20, 660, 40);
		labelNome.setBounds(150, 80, 400, 20);
		campoNome.setBounds(150, 100, 400, 40);
		labelSobrenome.setBounds(150, 140, 400, 20);
		campoSobrenome.setBounds(150, 160, 400, 40);
		labelDataNascimento.setBounds(150, 200, 400, 20);
		campoDataNascimento.setBounds(150, 220, 400, 40);
		labelEmail.setBounds(150, 260, 400, 20);
		campoEmail.setBounds(150, 280, 400, 40);
		labelCargo.setBounds(150, 320, 400, 20);
		comboboxCargo.setBounds(150, 340, 400, 40);
		labelSalario.setBounds(150, 380, 400, 20);
		campoSalario.setBounds(150, 400, 400, 40);
		botaoGravar.setBounds(560, 400, 130, 40);
	
		//Nas linhas  ,adicionamos os componentes a tela.
		add(labelTitulo);
		add(labelNome);
		add(campoNome);
		add(labelSobrenome);
		add(campoSobrenome);
		add(labelDataNascimento);
		add(campoDataNascimento);
		add(labelEmail);
		add(campoEmail);
		add(labelCargo);
		add(comboboxCargo);
		add(labelSalario);
		add(campoSalario);
		add(botaoGravar);
	
		//Chamando o método sqlCarregarCargos.
		sqlCarregarCargos();
	
		//Tornando a tela visível.
		setVisible(true);
	}

	private void criarEventos() {
		//Nas linhas  ,definimos que, ao ser acionado, o botão Salvar irá chamar o método sqlInserirFuncionario.
		botaoGravar.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				Funcionario novoFuncionario = new Funcionario();
				novoFuncionario.setNome(campoNome.getText());
				novoFuncionario.setSobrenome(campoSobrenome.getText());
				novoFuncionario.setDataNascimento(campoDataNascimento.getText());
				novoFuncionario.setEmail(campoEmail.getText());
				Cargo cargoSelecionado = (Cargo) comboboxCargo.getSelectedItem();
				if(cargoSelecionado != null) novoFuncionario.setNome(cargoSelecionado.getNome());
			
				novoFuncionario.setSalario(Double.valueOf(campoSalario.getText().replace(",", ".")));
			
				sqlInserirFuncionario(novoFuncionario);
			}
		});
	}

	//Nas linhas  ,realizamos a conexão com o banco de dados para, dessa forma, lermos todos os cargos cadastrados e preenchermos o componente JComboBox.
	private void sqlCarregarCargos() {
		//Conexão
		Connection conexao;
		//Instrução SQL
		Statement instrucaoSQL;
		//Resultados
		ResultSet resultados;
	
		try {
			//conectando ao banco de dados
			conexao = DriverManager.getConnection(BancoDeDados.stringDeConexao, BancoDeDados.usuario, BancoDeDados.senha);
		
			instrucaoSQL = conexao.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);
			resultados = instrucaoSQL.executeQuery("SELECT * from cargos order by nome asc");
			comboboxCargo.removeAll();
		
			while (resultados.next()) {
				Cargo cargo = new Cargo();
				cargo.setId(resultados.getInt("id"));
				cargo.setNome(resultados.getString("Nome"));
				comboboxCargo.addItem(cargo);
			}
			comboboxCargo.updateUI();
		
			conexao.close();
		} catch (SQLException ex) {
			JOptionPane.showMessageDialog(null, "Ocorreu um erro ao carregar os cargos.");
			Logger.getLogger(FuncionariosInserir.class.getName()).log(Level.SEVERE, null, ex);
		}
	}

	private void sqlInserirFuncionario(Funcionario novoFuncionario) {
	
		//Validando nome
		if(campoNome.getText().length() <= 3) {
			JOptionPane.showMessageDialog(null, "Por favor, preencha o nome corretamente.");
			return;
		}
	
		//Validando sobrenome
		if(campoSobrenome.getText().length() <= 3) {
			JOptionPane.showMessageDialog(null, "Por favor, preencha o sobrenome corretamente.");
			return;
		}
	
		//Validando salário
		if(Double.parseDouble(campoSalario.getText().replace(",", ".")) <= 100) {
			JOptionPane.showMessageDialog(null, "Por favor, preencha o salário corretamente.");
			return;
		}
	
		//Validando email
		Boolean emailValidado = false;
		String ePattern = "^[a-zA-Z0-9.!#$%&'*+/=?^_¨{|}~-]+@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9)+\\.)+[a-zA-Z]{2,}))S";
		Pattern p = Pattern.compile(ePattern);
		Matcher m = p.matcher(campoEmail.getText());
		emailValidado = m.matches();
	
		if(!emailValidado) {
			JOptionPane.showMessageDialog(null, "Por favor, preencha o email corretamente.");
			return;
		}
	
		//conexão
		Connection conexao;
	
		//instrução SQL
		PreparedStatement instrucaoSQL;
	
		try {
			//Conectando ao banco de dados
			conexao = DriverManager.getConnection(BancoDeDados.stringDeConexao, BancoDeDados.usuario, BancoDeDados.senha);
		
			String template = "INSERT INTO funcionarios (nome, sobrenome, dataNascimento, email, cargo, salario)";
			template = template+" VALUES (?,?,?,?,?,?)";
			instrucaoSQL = conexao.prepareStatement(template);
			instrucaoSQL.setString(1, novoFuncionario.getNome());
			instrucaoSQL.setString(2, novoFuncionario.getSobrenome());
			instrucaoSQL.setString(3, novoFuncionario.getDataNascimento());
			instrucaoSQL.setString(4, novoFuncionario.getEmail());
			if(novoFuncionario.getNome() == "") {
				instrucaoSQL.setString(5, novoFuncionario.getCargo());
			}else {
				instrucaoSQL.setNull(5, java.sql.Types.INTEGER);
			}
			instrucaoSQL.setString(6, Double.toString(novoFuncionario.getSalario()));
			instrucaoSQL.executeUpdate();
		
			JOptionPane.showMessageDialog(null, "Funcionário adicionado com sucesso!");
			Navegador.inicio();
		
			conexao.close();
		} catch (SQLException ex) {
			JOptionPane.showMessageDialog(null, "Ocorreu um erro ao adicionar o funcionário.");
			Logger.getLogger(FuncionariosInserir.class.getName()).log(Level.SEVERE, null, ex);
			}
		}
}

O que vem depois disso? Isso é que é importante para perceber o erro

sim, esqueci de por, o erro parece q é nessa linha
at sistema.telas.FuncionariosInserir$1.actionPerformed(FuncionariosInserir.java:132)

Isso deve ter mais informação sobre o erro (que exception ocorre)?
E o que está nessa linha 132?

aparece q é essa linha q da erro novoFuncionario.setSalario(Double.valueOf(campoSalario.getText().replace(",", “.”)));

nao seria

novoFuncionario.setSalario(Double.parseDouble(campoSalario.getText().replace(",", “.”)));

?

essa parte:

if(novoFuncionario.getNome() == "") {
			instrucaoSQL.setString(5, novoFuncionario.getCargo());
		}else {
			instrucaoSQL.setNull(5, java.sql.Types.INTEGER);
		}

não entendi direito, não está ao contrário? porque assim se o nome for nulo você está inserindo o cargo, e se não for nulo você está colocando cargo como nulo…

Isto é sempre false. Comparação de Strings deve ser feita com o equals e não com ==

if(novoFuncionario.getNome().equals("") {

Em relação ao erro ainda não mostraste informação importante. Mostra todo o stacktrace.

1 curtida

aqui ta tudo oq aparece
Exception in thread “AWT-EventQueue-0” java.lang.NullPointerException
at sistema.telas.FuncionariosInserir$1.actionPerformed(FuncionariosInserir.java:132)
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.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:279)
at java.desktop/java.awt.Component.processMouseEvent(Component.java:6636)
at java.desktop/javax.swing.JComponent.processMouseEvent(JComponent.java:3342)
at java.desktop/java.awt.Component.processEvent(Component.java:6401)
at java.desktop/java.awt.Container.processEvent(Container.java:2263)
at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:5012)
at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2321)
at java.desktop/java.awt.Component.dispatchEvent(Component.java:4844)
at java.desktop/java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4919)
at java.desktop/java.awt.LightweightDispatcher.processMouseEvent(Container.java:4548)
at java.desktop/java.awt.LightweightDispatcher.dispatchEvent(Container.java:4489)
at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2307)
at java.desktop/java.awt.Window.dispatchEventImpl(Window.java:2764)
at java.desktop/java.awt.Component.dispatchEvent(Component.java:4844)
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(AccessController.java:391)
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(AccessController.java:391)
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)

msm ajustando oq vc colocou continua dando erro na msm linha

Agora sabemos que o problema é um NullPointer

Se a linha é esta

novoFuncionario.setSalario(Double.valueOf(campoSalario.getText().replace(",", “.”)));

então um destes será null

  • novoFuncionario
  • campoSalario
  • campoSalario.getText()

ok eu entendi, mas oq eu devo por no codigo? e como devo fazer isso?

Tens de perceber qual deles é null e porque.

Uma vez que novoFuncionario já é acedido nas linhas anteriores, não deverá estar null neste ponto.

Se reparares, tu declaras um campoSalario global, mas depois no método de inicalização de componentes declaras outro com o mesmo nome, que é inicializado. O global, que usas depois abaixo, está a null.