Tenho a seguinte estrutura no form de Cadastro de Empresa, que é para mostrar os dados que foram cadastrados da empresa, a imagem foi salva corretamente, mas na hora de setar no Label eu não sei o que está acontecendo, só está retornando NullPointerException. O que eu posso estar fazendo de errado?
Obs: estou apenas salvando a imagem no banco, não estou salvando-a em diretório, seu tipo no banco de dados é o bytea.
public void mostraDados()
{
//recupera os dados do banco
Empresa e = ctremp.getEmpresa();
//seta os dados na view
txtCodigo.setText(String.valueOf(e.getCodigo()));
txtCodigo.setHorizontalAlignment(txtCodigo.CENTER);
txtNome.setText(e.getNome());
txtAtividade.setText(e.getAtividade());
txtCNPJ.setText(e.getCnpj());
txtTelefone.setText(e.getTelefone());
txtCelular.setText(e.getCelular());
txtCEP.setText(e.getCep());
txtEndereco.setText(e.getEndereco());
txtBairro.setText(e.getBairro());
txtNumero.setText(e.getNumero());
// lblLogo.setIcon(new ImageIcon(imagem));
ManipularImagem.exibirImagemLabel(e.getFoto(), lblLogo);
}
Classe DAO Empresa
public Empresa getEmpresa()
{
Empresa e = null;
DAOUf daoUf = new DAOUf();
DAOCidade daoCidade = new DAOCidade();
String sql = "select * from empresa";
ResultSet rs = Banco.getCon().consultar(sql);
try
{
if (rs.next())
{
e = new Empresa(rs.getInt("emp_cod"),
rs.getString("emp_nome"),
rs.getString("emp_atividade"),
rs.getString("emp_cnpj"),
rs.getString("emp_telefone"),
rs.getString("emp_celular"),
rs.getString("emp_cep"),
rs.getString("emp_endereco"),
rs.getString("emp_bairro"),
rs.getString("emp_numero"),
daoCidade.getCidadeCodigo(rs.getInt("cid_cod")),
daoUf.getUfCodigo(rs.getInt("uf_cod")),
rs.getBytes("emp_foto"));
}
} catch (SQLException ex)
{
JOptionPane.showMessageDialog(null, ex.getMessage());
e = null;
}
return e;
}
ManipularImagem - método
public static void exibirImagemLabel(byte[] minhaimagem, javax.swing.JLabel label)
{
//primeiro verifica se tem a imagem
//se tem convert para inputstream que é o formato reconhecido pelo ImageIO
if (minhaimagem != null)
{
InputStream input = new ByteArrayInputStream(minhaimagem);
try
{
BufferedImage imagem = ImageIO.read(input);
label.setIcon(new ImageIcon(imagem));
} catch (IOException ex)
{
}
} else
{
label.setIcon(null);
}
}
Posta o StackTrace completo da exceção.
1 curtida
Segue imagem do StackTrace
@staroski
Pelo que eu percebi quando depurei o código, a variável do método ManipularImagem está recebendo null, por isso o NullPointerException, mas o input que ta no read(input) está com o valor atribuído do InputStream. Não sei porque a variável imagem recebe null.
InputStream input = new ByteArrayInputStream(minhaimagem);
BufferedImage imagem = ImageIO.read(input);
Postar o StackTrace como imagem é sacanagem, próxima vez posta o texto.
Seu erro está acontecendo na linha 356 do arquivo frmCadEmpresa.java, mais precisamente no método mostraDados.
Como você não postou o código completo da classe, não sei o que há na linha 356, mas é lá que você está tentando manipular um objeto não inicializado.
Achei que vce iria preferir na imagem, por isso postei como imagem, desculpa. vou postar o código completo
public class frmCadEmpresa extends javax.swing.JDialog
{
BufferedImage imagem;
boolean primeiroAcesso;
CtrEmpresa ctremp = new CtrEmpresa();
CtrUf ctruf = new CtrUf();
CtrCidade ctrcid = new CtrCidade();
ArrayList<Uf> listaUfs = new ArrayList<>();
ArrayList<Cidade> listaCidades = new ArrayList<>();
Empresa e;
ImageIcon iconeSucesso = new ImageIcon("src/imagens/sucesso.png"); // sucesso
ImageIcon iconeErro = new ImageIcon("src/imagens/erro.png"); // erro
ImageIcon iconeWarning = new ImageIcon("src/imagens/warning.png"); // warning
ImageIcon iconePergunta = new ImageIcon("src/imagens/question.png"); // pergunta
ImageIcon iconeInformation = new ImageIcon("src/imagens/information.png"); // informação
/**
* Creates new form frmCadEmpresa
*
* @param parent
* @param modal
* @param op
*/
public frmCadEmpresa(java.awt.Frame parent, boolean modal, int op)
{
super(parent, modal);
initComponents();
primeiroAcesso = false;
if (op == 0)
{
primeiroAcesso = true;
btnAlterar.setEnabled(false);
btnCancelar.setEnabled(false);
carregaComboboxEstados();
} else
{
empresaJaCadastrada();
}
}
private void empresaJaCadastrada()
{
estadoInicial();
if (ctremp.buscaEmpresa())
{
mostraDados();
estadoAlterar();
}
}
private void carregaComboboxEstados()
{
listaUfs = ctruf.getListaTodosUfs();
cbbUf.removeAllItems();
for (int i = 0; i < listaUfs.size(); i++)
{
cbbUf.addItem(listaUfs.get(i));
}
}
public void carregaComboboxCidades()
{
Uf estado = (Uf) cbbUf.getSelectedItem();
listaCidades = ctrcid.RecuperaCidades(estado.getCod());
cbbCidade.removeAllItems();
for (int i = 0; i < listaCidades.size(); i++)
{
cbbCidade.addItem(listaCidades.get(i));
}
}
public void mostrarEstadoDados(Uf estado)
{
Uf u = ctruf.RecuperaEstado(estado.getCod());
cbbUf.removeAllItems();
cbbUf.addItem(u);
}
public void mostrarCidadeDados(Cidade cidade) // Recupera a cidade do banco pra mostrar no CBB
{
Cidade cid = ctrcid.getCidadeCodigo(cidade.getCod());
cbbCidade.removeAllItems();
cbbCidade.addItem(cid);
}
public void estadoInicial()
{
btnSalvar.setEnabled(false);
btnAlterar.setEnabled(false);
btnCancelar.setEnabled(true);
btnPesquisaCEP.setEnabled(false);
btnPesquisarImagem.setEnabled(false);
txtCodigo.setEnabled(false);
txtNome.setEnabled(false);
txtAtividade.setEnabled(false);
txtCNPJ.setEnabled(false);
txtTelefone.setEnabled(false);
txtCelular.setEnabled(false);
txtCEP.setEnabled(false);
txtEndereco.setEnabled(false);
txtBairro.setEnabled(false);
txtNumero.setEnabled(false);
txtComplemento.setEnabled(false);
lblLogo.setEnabled(false);
cbbCidade.setEnabled(false);
cbbUf.setEnabled(false);
}
public void cancelar()
{
btnSalvar.setVisible(false);
btnAlterar.setEnabled(true);
btnCancelar.setEnabled(true);
btnPesquisaCEP.setEnabled(false);
btnPesquisarImagem.setEnabled(false);
txtCodigo.setEnabled(false);
txtNome.setEnabled(false);
txtAtividade.setEnabled(false);
txtCNPJ.setEnabled(false);
txtTelefone.setEnabled(false);
txtCelular.setEnabled(false);
txtCEP.setEnabled(false);
txtEndereco.setEnabled(false);
txtBairro.setEnabled(false);
txtNumero.setEnabled(false);
txtComplemento.setEnabled(false);
lblLogo.setEnabled(false);
cbbCidade.setEnabled(false);
cbbUf.setEnabled(false);
}
public void estadoAlterarando()
{
btnSalvar.setVisible(true);
btnSalvar.setEnabled(true);
btnAlterar.setEnabled(false);
btnCancelar.setEnabled(true);
btnPesquisaCEP.setEnabled(true);
btnPesquisarImagem.setEnabled(true);
txtCodigo.setEnabled(false);
txtNome.setEnabled(true);
txtAtividade.setEnabled(true);
txtCNPJ.setEnabled(true);
txtTelefone.setEnabled(true);
txtCelular.setEnabled(true);
txtCEP.setEnabled(true);
txtEndereco.setEnabled(true);
txtBairro.setEnabled(true);
txtNumero.setEnabled(true);
txtComplemento.setEnabled(true);
lblLogo.setEnabled(true);
cbbCidade.setEnabled(true);
cbbUf.setEnabled(true);
}
public void estadoAlterar()
{
btnSalvar.setVisible(false);
btnAlterar.setEnabled(true);
btnCancelar.setEnabled(true);
btnPesquisaCEP.setEnabled(false);
btnPesquisarImagem.setEnabled(false);
txtCodigo.setEnabled(false);
txtNome.setEnabled(false);
txtAtividade.setEnabled(false);
txtCNPJ.setEnabled(false);
txtTelefone.setEnabled(false);
txtCelular.setEnabled(false);
txtCEP.setEnabled(false);
txtEndereco.setEnabled(false);
txtBairro.setEnabled(false);
txtNumero.setEnabled(false);
txtComplemento.setEnabled(false);
lblLogo.setEnabled(false);
cbbCidade.setEnabled(false);
cbbUf.setEnabled(false);
}
public void estadoEdicao()
{
btnSalvar.setEnabled(true);
btnAlterar.setEnabled(false);
btnCancelar.setEnabled(true);
btnPesquisaCEP.setEnabled(true);
btnPesquisarImagem.setEnabled(true);
txtCodigo.setEnabled(false);
txtNome.setEnabled(true);
txtAtividade.setEnabled(true);
txtCNPJ.setEnabled(true);
txtTelefone.setEnabled(true);
txtCelular.setEnabled(true);
txtCEP.setEnabled(true);
txtEndereco.setEnabled(true);
txtBairro.setEnabled(true);
txtNumero.setEnabled(true);
txtComplemento.setEnabled(true);
lblLogo.setEnabled(true);
cbbCidade.setEnabled(true);
cbbUf.setEnabled(true);
carregaComboboxEstados();
}
public void limpaTela()
{
txtCodigo.setText("");
txtNome.setText("");
txtAtividade.setText("");
txtCNPJ.setText("");
txtTelefone.setText("");
txtCelular.setText("");
txtCEP.setText("");
txtEndereco.setText("");
txtBairro.setText("");
txtNumero.setText("");
cbbUf.setSelectedIndex(-1);
cbbCidade.setSelectedIndex(-1);
}
public void soLetras(java.awt.event.KeyEvent evt, javax.swing.JTextField jtf, int max_caracter)
{
if ((Character.isLetter(evt.getKeyChar()) || evt.getKeyChar() == ' ') && jtf.getText().length() < max_caracter)
{
evt.isConsumed();
} else
{
evt.consume();
}
}
public void soNumeros(java.awt.event.KeyEvent evt, javax.swing.JTextField jtf, int max_caracter)
{
if (Character.isDigit(evt.getKeyChar()) && jtf.getText().length() < max_caracter)
{
evt.isConsumed();
} else
{
evt.consume();
}
}
public String validaDados()
{
String valida = "";
String cnpj = txtCNPJ.getText();
CNPJ pj = new CNPJ(cnpj);
if (txtNome.getText().equals(""))
{
valida = valida + "\nInforme um Nome";
txtNome.setBorder(BorderFactory.createLineBorder(Color.RED));
} else
{
txtNome.setBorder(BorderFactory.createLineBorder(Color.GRAY));
}
if (txtCNPJ.getText().equals(" . . / - "))
{
valida = valida + "\nInforme um CNPJ";
txtCNPJ.setBorder(BorderFactory.createLineBorder(Color.RED));
} else
{
txtCNPJ.setBorder(BorderFactory.createLineBorder(Color.GRAY));
}
if (txtTelefone.getText().equals("( ) - "))
{
valida = valida + "\nInforme um Telefone";
txtTelefone.setBorder(BorderFactory.createLineBorder(Color.RED));
} else
{
txtTelefone.setBorder(BorderFactory.createLineBorder(Color.GRAY));
}
if (txtEndereco.getText().equals(""))
{
valida = valida + "\nInforme um Endereço";
txtEndereco.setBorder(BorderFactory.createLineBorder(Color.RED));
} else
{
txtEndereco.setBorder(BorderFactory.createLineBorder(Color.GRAY));
}
// if (!pj.isCNPJ())
// {
// JOptionPane.showMessageDialog(null, "CNPJ inválido!! ",
// "Erro - CNPJ Inválido", JOptionPane.INFORMATION_MESSAGE, iconeErro);
// }
return valida;
}
public void mostraDados()
{
e = ctremp.getEmpresa();
//seta os dados na view
txtCodigo.setText(String.valueOf(e.getCodigo()));
txtCodigo.setHorizontalAlignment(txtCodigo.CENTER);
txtNome.setText(e.getNome());
txtAtividade.setText(e.getAtividade());
txtCNPJ.setText(e.getCnpj());
txtTelefone.setText(e.getTelefone());
txtCelular.setText(e.getCelular());
txtCEP.setText(e.getCep());
txtEndereco.setText(e.getEndereco());
txtBairro.setText(e.getBairro());
txtNumero.setText(e.getNumero());
mostrarEstadoDados(e.getUf());
cbbUf.setSelectedItem(e.getUf().getSigla());
mostrarCidadeDados(e.getCidade());
cbbCidade.setSelectedItem(e.getCidade().getNome());
ManipularImagem.exibirImagemLabel(e.getFoto(), lblLogo);
}
private void btnSalvarActionPerformed(java.awt.event.ActionEvent evt)
{
String valida = validaDados();
if (valida.equals(""))
{
e = new Empresa();
Uf estado = (Uf) cbbUf.getSelectedItem();
Cidade cidade = (Cidade) cbbCidade.getSelectedItem();
if (!txtCodigo.getText().equals(""))
{
e.setCodigo(Integer.parseInt(txtCodigo.getText()));
}
e.setNome(txtNome.getText().toUpperCase());
e.setAtividade(txtAtividade.getText().toUpperCase());
e.setCnpj(txtCNPJ.getText().replaceAll("\\D", ""));
e.setTelefone(txtTelefone.getText().replaceAll("\\D", ""));
e.setCelular(txtCelular.getText().replaceAll("\\D", ""));
e.setUf(estado);
e.setCidade(cidade);
e.setCep(txtCEP.getText().replace("-", ""));
e.setEndereco(txtEndereco.getText().toUpperCase());
e.setBairro(txtBairro.getText().toUpperCase());
e.setNumero(txtNumero.getText());
e.setFoto(ManipularImagem.getImgBytes(imagem));
if (ctremp.salvar(e))
{
JOptionPane.showMessageDialog(null, "Empresa cadastrada com sucesso!!",
"Cadastrado com sucesso", JOptionPane.INFORMATION_MESSAGE, iconeSucesso);
estadoAlterar();
if (primeiroAcesso)
{
dispose();
frmMenuPrincipal menuP = new frmMenuPrincipal();
menuP.setNomeEmpresa();
menuP.setVisible(true);
}
} else
{
JOptionPane.showMessageDialog(null, "Erro ao cadastrar empresa!!",
"Erro ao cadastrar", JOptionPane.INFORMATION_MESSAGE, iconeErro);
}
} else
{
JOptionPane.showMessageDialog(null, "Por favor preencha os campos obrigatórios!!\n" + valida,
"Erro - campos obrigatórios", JOptionPane.INFORMATION_MESSAGE, iconeErro);
}
}
private void btnCancelarActionPerformed(java.awt.event.ActionEvent evt)
{
limpaTela();
cancelar();
mostraDados();
}
private void btnAlterarActionPerformed(java.awt.event.ActionEvent evt)
{
estadoAlterarando();
}
private void txtTelefoneFocusLost(java.awt.event.FocusEvent evt)
{
if (txtTelefone.getText().equals("( ) - "))
{
txtTelefone.setBorder(BorderFactory.createLineBorder(Color.RED));
} else
{
txtTelefone.setBorder(BorderFactory.createLineBorder(Color.GRAY));
}
}
private void cbbUfPopupMenuWillBecomeInvisible(javax.swing.event.PopupMenuEvent evt)
{
if (cbbUf.isPopupVisible())
{
carregaComboboxCidades();
}
}
private void cbbUfFocusGained(java.awt.event.FocusEvent evt)
{
carregaComboboxEstados();
}
private void txtCNPJFocusLost(java.awt.event.FocusEvent evt)
{
if (txtCNPJ.getText().equals(" . . / - "))
{
txtCNPJ.setBorder(BorderFactory.createLineBorder(Color.RED));
} else
{
txtCNPJ.setBorder(BorderFactory.createLineBorder(Color.GRAY));
}
}
private void btnPesquisaCEPActionPerformed(java.awt.event.ActionEvent evt)
{
WebServiceCep buscaCep = WebServiceCep.searchCep(txtCEP.getText());
txtEndereco.setText(buscaCep.getLogradouroFull().toUpperCase());
txtBairro.setText(buscaCep.getBairro().toUpperCase());
}
private void txtEnderecoKeyTyped(java.awt.event.KeyEvent evt)
{
soLetras(evt, txtEndereco, 50);
}
private void txtEnderecoFocusLost(java.awt.event.FocusEvent evt)
{
if (txtEndereco.getText().equals(""))
{
txtEndereco.setBorder(BorderFactory.createLineBorder(Color.RED));
} else
{
txtEndereco.setBorder(BorderFactory.createLineBorder(Color.GRAY));
}
txtEndereco.setText(txtEndereco.getText().toUpperCase());
}
private void txtBairroKeyTyped(java.awt.event.KeyEvent evt)
{
soLetras(evt, txtBairro, 30);
}
private void txtBairroFocusLost(java.awt.event.FocusEvent evt)
{
txtBairro.setText(txtBairro.getText().toUpperCase());
}
private void txtNumeroKeyTyped(java.awt.event.KeyEvent evt)
{
soNumeros(evt, txtNumero, 5);
}
private void txtAtividadeKeyTyped(java.awt.event.KeyEvent evt)
{
soLetras(evt, txtAtividade, 50);
}
private void txtAtividadeFocusLost(java.awt.event.FocusEvent evt)
{
txtAtividade.setText(txtAtividade.getText().toUpperCase());
}
private void txtNomeKeyTyped(java.awt.event.KeyEvent evt)
{
soLetras(evt, txtNome, 50);
}
private void txtNomeFocusLost(java.awt.event.FocusEvent evt)
{
if (txtNome.getText().equals(""))
{
txtNome.setBorder(BorderFactory.createLineBorder(Color.RED));
} else
{
txtNome.setBorder(BorderFactory.createLineBorder(Color.GRAY));
}
txtNome.setText(txtNome.getText().toUpperCase());
}
private void txtComplementoFocusLost(java.awt.event.FocusEvent evt)
{
txtComplemento.setText(txtComplemento.getText().toUpperCase());
}
private void txtComplementoKeyTyped(java.awt.event.KeyEvent evt)
{
soLetras(evt, txtComplemento, 12);
}
private void btnPesquisarImagemActionPerformed(java.awt.event.ActionEvent evt)
{
JFileChooser fc = new JFileChooser();
fc.setFileFilter(new FileFilter() // filtro p/ imagem
{
@Override
public boolean accept(File f)
{
String nome = f.getAbsolutePath();
return nome.endsWith("jpg") | nome.endsWith("png") | nome.endsWith("bmp") | f.isDirectory();
}
@Override
public String getDescription()
{
return "Imagem";
}
});
if (fc.showOpenDialog(null) == JFileChooser.APPROVE_OPTION)
{
File arquivo = fc.getSelectedFile();
try
{
imagem = ManipularImagem.setImagemDimensao(arquivo.getAbsolutePath(), lblLogo.getWidth(), lblLogo.getHeight());
lblLogo.setIcon(new ImageIcon(imagem));
} catch (Exception ex)
{
System.out.println(ex.getMessage());
}
} else
{
JOptionPane.showMessageDialog(null, "Você não selecionou nenhum arquivo.");
}
}
// Variables declaration - do not modify
private javax.swing.JButton btnAlterar;
private javax.swing.JButton btnCancelar;
private javax.swing.JButton btnPesquisaCEP;
private javax.swing.JButton btnPesquisarImagem;
private javax.swing.JButton btnSalvar;
private javax.swing.JComboBox<Cidade> cbbCidade;
private javax.swing.JComboBox<Uf> cbbUf;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel10;
private javax.swing.JLabel jLabel11;
private javax.swing.JLabel jLabel12;
private javax.swing.JLabel jLabel13;
private javax.swing.JLabel jLabel14;
private javax.swing.JLabel jLabel15;
private javax.swing.JLabel jLabel16;
private javax.swing.JLabel jLabel17;
private javax.swing.JLabel jLabel18;
private javax.swing.JLabel jLabel20;
private javax.swing.JLabel jLabel21;
private javax.swing.JLabel jLabel22;
private javax.swing.JLabel jLabel23;
private javax.swing.JLabel jLabel24;
private javax.swing.JLabel jLabel25;
private javax.swing.JLabel jLabel26;
private javax.swing.JLabel jLabel27;
private javax.swing.JLabel jLabel28;
private javax.swing.JLabel jLabel29;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel30;
private javax.swing.JLabel jLabel4;
private javax.swing.JLabel jLabel5;
private javax.swing.JLabel jLabel6;
private javax.swing.JPanel jPanel1;
private javax.swing.JPanel jPanel2;
private javax.swing.JLabel lblLogo;
private javax.swing.JTextField txtAtividade;
private javax.swing.JTextField txtBairro;
private javax.swing.JFormattedTextField txtCEP;
private javax.swing.JFormattedTextField txtCNPJ;
private javax.swing.JFormattedTextField txtCelular;
private javax.swing.JTextField txtCodigo;
private javax.swing.JTextField txtComplemento;
private javax.swing.JTextField txtEndereco;
private javax.swing.JTextField txtNome;
private javax.swing.JTextField txtNumero;
private javax.swing.JFormattedTextField txtTelefone;
// End of variables declaration
}
O que há na linha 356 do arquivo frmCadEmpresa.java ?
ManipularImagem.exibirImagemLabel(e.getFoto(), lblLogo);
Método exibirImagemLabel
public static void exibirImagemLabel(byte[] minhaimagem, javax.swing.JLabel label)
{
//primeiro verifica se tem a imagem
//se tem convert para inputstream que é o formato reconhecido pelo ImageIO
if (minhaimagem != null)
{
InputStream input = new ByteArrayInputStream(minhaimagem);
try
{
BufferedImage imagem = ImageIO.read(input);
label.setIcon(new ImageIcon(imagem));
} catch (IOException ex)
{
JOptionPane.showMessageDialog(null, ex.getMessage());
}
} else
{
label.setIcon(null);
}
}
Em nenhum lugar você está inicializando a variavel lblLogo.
Sim, mas mesmo que eu a inicialize continua com mesmo erro.
Se acontece, não é na mesma linha, pois se fosse a variável ‘e’ que não estivesse inicializada, o erro aconteceria bem antes, pois você acessa membros de ‘e’ antes daquela linha.
Você tem que aprender a interpretar o StackTrace.
// metodo para pegar o imageicon e gerar o array de bytes que salvara no banco
private byte[] ObjectToBytes(Object object) {
ObjectOutputStream oo = null;
byte[] dados = null;
try {
ByteArrayOutputStream bo = new ByteArrayOutputStream();
ImageIO.write((BufferedImage) object, "jpg", bo);//seta a imagem para bytesImg
bo.flush();//limpa a variável
dados = bo.toByteArray();//Converte ByteArrayOutputStream para byte[]
bo.close();//fecha a conversão
} catch (IOException ex) {
ex.printStackTrace();
}
tamobj = dados.length;
return dados;
}
// metodo para pegar os bytes lidos do banco e gerar o objeto que sera o imageicon
private Object BytesToObject(byte[] dados) {
Object object = null;
try {
object = ImageIO.read(new ByteArrayInputStream(dados));
} catch (IOException ex) {
ex.printStackTrace();
return new Object();
}
return object;
}