No que diz respeito ao tratamento de erros e exceções, um importante capítulo diz respeito as exceções não tratadas. O tutorial de hoje objetiva mostrar como proceder em casos assim.
Simularemos um erro a partir da criação de um arquivo txt, e o invocando utilizaremos a classe scanner para ler o arquivo para onde passaremos o objeto criado. Exatamente como mostra a linha de código abaixo.
File fil = new File(“arquivo.txt”);
Scanner scanner = new Scanner fil;
Lembrando que estamos trabalhando no contexto de captura de múltiplas exceções, mais especificamente com o NullPointerException e o NumberFormatException. Abordamos também que exceções não tratadas deverão ser capturadas por meio da implementação de exceções genéricas. Assim, você deve ter implementado tal instrução por meio do catch.
catch (Exception e) {
e.printStackTrace();
}
Dessa forma ao executar o programa, será lançada uma exceção de FileNotFoundException.
Entretanto, sem a exceção genérica, você sequer conseguiria implementar o Scanner(), sem que fosse apontado um erro para o mesmo. Porém, executando-o mesmo assim, cairíamos em um erro de compilação.
Continuando (Proceed) e examinando melhor nosso código a IDE solicitaria que fosse adicionada na declaração do método main, a palavra-chave throws. A cláusula throws é utilizada para especificar quais exceções determinado método não irá tratar. Isto é, quando adicionamos a cláusula throws no método main especificando a exceção FileNotFoundException, estamos indicando que ela não será tratada no método em questão.
Por outro lado, temos também a palavra reservada throw, que deverá ser adicionada na assinatura do método. Assim estaríamos indicando que um trecho de código que chame este método deverá obrigatoriamente capturar uma possível exceção que ele lance, no caso um FileNotFoundException.
O throw poderia ser usado também lançando uma exceção genérica, mas não é este nosso objetivo.
MAIS SOBRE O BLOCO CATCH
Tomaremos como exemplo uma exceção genérica, se ao implementá-la nada for colocado no escopo, o que acontecerá? Na verdade, nada acontecerá, o programa não vai “rodar” e nenhuma mensagem será exibida no console. Dessa forma você não saberá o que está acontecendo com o seu sistema.
É neste contexto que surge a importância de imprimir alguma mensagem no console. Dessa forma você e/ou a equipe de desenvolvimento possa se orientar.
Mas além da mensagem que será impressa no console, também é uma boa prática imprimir alguma informação também para o usuário. E para o usuário, exibiremos a mensagem por meio da janela gráfica showMessageDialog, capturando a classe e seu nome. Ao executar o programa teremos:
E para corrigir o erro da exceção FileNotFoundException lançada, basta adicionar o arquivo de fato, e indicar o caminho, como por exemplo, colocando-o no C:/. Execute e o programa rodará normalmente.
File fil = new File("C://Line.txt");
EM POUCAS PALAVRAS
Fica claro que tratando as exceções mesmo quando houver um problema haverá um fluxo a ser seguido. Se por exemplo, o usuário deixar de informar o caminho de um dado arquivo, a tela não irá fechar. Ele será avisado do que deverá fazer e prosseguirá com a execução.
Independente do erro devemos trabalhar para que o sistema não “quebre”, dando pistas ao usuário do que ele precisa fazer. Dentro de um cenário de usabilidade o que podemos fazer é não deixar muitas decisões para o usuário tomar. Ele deverá ser guiado de forma sutil de forma a completar a tarefa com tranquilidade.