Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Exception in thread "AWT-EventQueue-0"

Boa tarde! Pessoal, estou com um probleminha aqui, quando faço alguma alteração no nome do produto ou na descrição tudo certo, mas quando tento alterar o preço do produto da uma Exception. Alguém ja passou por isso?

public class ProdutoFrame extends JFrame {

private static final long serialVersionUID = 1L;

    botaoEditar.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            alterar();
            limparTabela();
            preencherTabela();
        }
    });
}

private void alterar()  {
    Object objetoDaLinha = (Object) modelo.getValueAt(tabela.getSelectedRow(), 0);
    if (objetoDaLinha instanceof Long) {
        Long id = (Long) objetoDaLinha;
        String nome = (String) modelo.getValueAt(tabela.getSelectedRow(), 1);
        String descricao = (String) modelo.getValueAt(tabela.getSelectedRow(), 2);
        BigDecimal preco = (BigDecimal) modelo.getValueAt(tabela.getSelectedRow(), 3);    // A EXCEPTION APARECE NESTA LINHA
        this.produtoController.alterar(nome, descricao, preco, id);
    } else {
        JOptionPane.showMessageDialog(this, "Por favor, selecionar o ID");
    }
}

public class ProdutoController {

public void alterar(String nome, String descricao, BigDecimal preco, Long id) {
        EntityManager em = JPAUtil.getEntityManager();

    Produto produto = em.createQuery("SELECT p FROM Produto p WHERE p.id = :id", Produto.class)
        .setParameter("id", id).getSingleResult();

    ProdutoDao produtoDao = new ProdutoDao(em);        
    em.getTransaction().begin();
    produto.setNome(nome);
    produto.setDescricao(descricao);
    produto.setPreco(preco);
    produtoDao.atualizarProduto(produto);
    em.getTransaction().commit();
    em.close();
    System.out.println("Alterando produto: " + id);
}

}

Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: class java.lang.String cannot be cast to class java.math.BigDecimal (java.lang.String and java.math.BigDecimal are in module java.base of loader 'bootstrap')
at br.com.alura.loja.view.ProdutoFrame.alterar(ProdutoFrame.java:193)
at br.com.alura.loja.view.ProdutoFrame$4.actionPerformed(ProdutoFrame.java:176)
2 respostas
solução!

Fala Flavio de boa ?

Cara no caso, é porque a string não pode ser mudada para big decimal, tanto que sua exception é falando que o cast não é suportado.

No caso você vai ter que optar por algum outro jeito de fazer a transformação, seja criando um BigDecimal e passar a string no construtor, ou usar o metódo estatico valueOf()...

Acho que vai ser mais jogo usar o construtor, logo seu codigo ficaria assim:

BigDecimal preco = new BigDecimal(modelo.getValueAt(tabela.getSelectedRow(), 3));

Fala Matheus! de boa! Opa, resolveu meu problema aqui! Só acrescentei no final o .toString porque ainda estava reclamando, ficando assim. BigDecimal preco = new BigDecimal(modelo.getValueAt(tabela.getSelectedRow(), 3).toString()); muito obrigado, agora funcionou direitinho!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software