Exceptions

6 respostas
A

Olá,

Há muito tempo atrás utilizava o Visual Basic para desenvolver minhas aplicações e neste aplicativo podiamos realizar o tratamento (bem tosco!!) de erro com:

resume - após dar o devido tratamento ao erro, ficava tentando processar a linha até que o erro deixasse de ocorrer e,

resume next - que após tratar o erro ia para a próxima instrução após a que apresentou problema.

Com posso fazer isso em Java ? Todos os exemplos de try/catch que vi… sai da aplicação. Preciso gravar o erro em um log e continuar o processamento.

Obrigado

6 Respostas

ziegfried
try {
   .....
} catch(Exception e) {
   .....
} finally {
   //Algum processamento que sempre deve acontecer
}

isso resolve teu problema?

ViniGodoy

Eu também fui programador de VB. Aliás, sou, porque tenho que manter um sistema legado aqui…

Francamente, o tratamento de erros do VB é lamentável.

Outra dica é usar um uncaughtExceptionHandler para tratar as exceções que você não pegar (uma RuntimeException, por exemplo).

Veja como se faz isso no tópico:
http://www.guj.com.br/posts/list/49791.java#261390

Se você está começando a lidar com exceptions agora, não deixe de seguir as dicas do Effective Java (resumidas aqui):
http://br.geocities.com/vanessasabino/java/ej6.html

E dê uma olhada no artigo muito interessante sobre o assunto, aqui:
http://blog.caelum.com.br/2006/10/07/lidando-com-exceptions/

_Renatu

O resume next é utilizado dentro de um loop, nao? Faz muito tempo que nao toco em VB…

bom, se for um loop, voce resolve assim:

for (...) {
  try {
    //trata cada elemento
  } catch (Exception e) {
    //loga caso lance a excecao
  } finally {
    //executa algo que deve ser executado sempre
    //por exemplo, fechar uma conexao
  }
}
ViniGodoy

Só um detalhe.

Embora esteja nos exemplos da galera, nunca faça
catch(Exception e)

Prefira sempre a exceção específica, por exemplo:
catch (IOException e)

Se tiver acesso um dia, leia na íntegra o capítulo sobre exceções do Effective Java. :slight_smile:

peczenyj

Não senhor, try/catch não precisa sair da aplicação.

O que acontece é que a primeira exception lançada por alguma classe é imediatamente pega pelo bloco catch. Isso termina com o fluxo try. Diferente do VB, não é vantajoso vc ‘ignorar’ as exceptions lançadas pelo código, simplesmente pulando as instruções problemáticas.

Exemplo simples

try{ Conexao c = new Conexao("meus parametros"); c.open(); c.doSomething("lalala"); c.close(); } catch (Exception e) {..}

Se houver algum problema com a criação do objeto c, não adianta executar as instruções posteriores, pois c é um objeto nulo. Alias cada metodo pode lançar Exception e RuntimeExceptions com significados diferentes, logo vc não pode, simplesmente, jogar tudo num bloco try/catch pegando por todas as Exceptions indiscriminadamente. Le o metodo lança a exception, é por que vc tem que fazer alguma coisa com ela, até mesmo ignora-la, mas uma de cada vez :wink:

A

Obrigado pelas dicas ! Elas clarearam minhas idéias.

para os programores VB… que bom que existe o Java ! Como aquilo era um lixo !

Abraços

Criado 18 de janeiro de 2007
Ultima resposta 18 de jan. de 2007
Respostas 6
Participantes 5