Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

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 :(