11
respostas

Tratamento com try catch não dando no resultado.

public void adicionarProduto() {
        try {
        vendaProdutos.add(vendaProduto);
        vendaProduto = new Venda_produto();
        } catch(NullPointerException e) {
            Mensagem.mensagemError("Lista do produto não pode ser vazia!");
        }
    }

Galera não sei se eu estou usando errando ou se eu penso errado sobre o tratamento de excpetions, vamos lá. Tenho minha html com uma lista de produto para adicionar, a minha intenção é por exemplo na minha html quando ngm escolher o produto e apertar no botão de adicionar produto lançar uma excption na tela e não no console falando que não é possivel, mais do jeito que to fazendo não lança nenhuma excpetion e acaba adicionando em branco o produto na minha lista :(

11 respostas

Olá, tudo bem?

O NullPointerException somente vai ser lançado quando há uma tentativa de acessar algo de uma referência nula. Neste caso, você poderia verificar se existe algo errado com os dados de entrada: vazios, nulos ou inconsistentes mesmo, e lançar, manualmente a exceção com throw new Excecao.

Té mais,

Fagner fazer isso usando um if? poderia ser mais especifico?

o Try/Catch , funciona como uma "estrutura de proteção"(este termo não existe, estou utilizando apenas para didática), a ideia dele é que tudo que estiver dentro do bloco Try, vai estar protegido, e caso aconteça alguma Exceção nesse bloco em vez de estourar uma exceção para o usuário, você tem a possibilidade de tratar através de um catch, direcionando ele para uma mensagem de erro , ou qualquer outro fluxo

exemplo de exceção indo direto para o usuário (http://doraprojects.net/blog/wp-content/uploads/2014/09/jstl1.jpg)

Uma observação, esse vendaProduto não deveria vir como parâmetro?

Você pode usar o if sim para isto:

if(vendaProduto == null) { throw new Excecao(); }

É uma possível solução. Você também pode fazer essa verificação nos atributos deste objeto.

Espero ter ajudado,

Então Bruno oque eu estou fazendo é isso mesmo, oque tiver dentro do try estára protegido e se cair no catch irá acusa a mesangem, é dessa forma que eu penso também, e você está se referindo ao.

 vendaProduto = new Venda_produto();

?? Não não to passando parametro nenhum, aqui é apenas para limpar o produto da minha lista para não ficar item repetidos

Fagner qual a diferença entre o throw new e o try catch? Tem alguma diferença entre ambas?

public void adicionarProduto() {
        try {
        vendaProdutos.add(vendaProduto)
    [restante do codigo]

O Objeto deveria vir como parâmetro no método , você esta inserindo ele , mas não tem nenhuma referencia a ele , anterior ao vendaProdutos.add(vendaProduto) , mas acredito que isso acontece porque esta usando JSF, correto?

throw Exception, é a forma com que você lança exceções

Try/Catch é a forma de capturar exceções

A parte de exceções no java é bem ampla, fica muito complexo tentar explicar algo do gênero, de maneira tão abrangente em um post.

Da uma olhada nesse curso da Alura, ele é focado só em exceções :

https://cursos.alura.com.br/course/certificacao-java-excecoes

Pode ter certeza que eu vou olhar, sim sim estou usando o JSF, nesse caso eu não passo nada no parametro, porque ja vem do meu html, uso o process no botão. Entendi, valeu ai Bruno, estou vago nesse assunto de try catch :(