Capturar Exceções

E ai Pessoal,

Estou querendo achar uma forma de capturar as exceções do meu projeto e exibi-las, ao invés do console, em uma janela swing. Existe alguma forma de fazer isso? 

Desde já agradeço a atenção,

[],s

Alberto

try {
	// seu código
} catch(Exception e) {
	JOptionPane.showMessageDialog(null, e.getMessage());
}

Isso vai usar JOptionPane para imprimir a mensagem de erro, mas não acho uma boa idéia, a mensagem pode ser meio grande! :mrgreen:

Use os métodos static da class JOptionPane.

Ex:
JOptionPane.showMessageDialog(null, “Mensagem”);

Thread.setUncaughtExceptionHandler

Deve resolver o seu problema. Todas as exceções Runtime que não são capturadas são enviadas para esse método. Você então pode redireciona-las para onde quiser. Aqui usamos para simplesmente dar uma única vez a mensagem “There are uncaught exceptions, see log for details” e gravamos a exceção em si num log textual.

Tudo muito limpo e sem aterrorizar o pobre do usuário.

[quote=von.juliano] try { // seu código } catch(Exception e) { JOptionPane.showMessageDialog(null, e.getMessage()); }
Isso vai usar JOptionPane para imprimir a mensagem de erro, mas não acho uma boa idéia, a mensagem pode ser meio grande! :mrgreen: [/quote]

Nunca faça um try…catch como esse. Se você tiver absoluta certeza que deve faze-lo, pense novamente e trate as exceções específicas. Senão novas exceções no futuro também poderão ser pegas. E lembre-se que exceções de Runtime também serão capturadas nesse código horrível aí em cima.

Do contrário, use um UncaughtExceptionHandler para capturar as exceções de Runtime que eventualmente você não conseguiu capturar e trate as exceções específicas, seja se livrando do problema, dando uma mensagem ao usuário ou redirecionando a exceção para a classe de cima.

Minha idéia é capturar as exceções que não estão tratadas no Try/Catch. Por exemplo: Ocorreu uma exceção em uma SQL que não está tratado, o erro irá ocorrer e irá gerar no console. Eu quero capturar essa exceção e mostrar em uma janela.

=)

Obrigado pelas dicas pessoal. Pesquisei a dica do ViniGodoy e consegui fazer o que estava querendo. Segue abaixo o código implementado:

No Main:


...

Thread.setDefaultUncaughtExceptionHandler(
                new LogExceptions()
                );

...

Classe que captura as exceções

class LogExceptions implements Thread.UncaughtExceptionHandler {
    
    public void uncaughtException(Thread t, Throwable e) {
        
        JOptionPane.showMessageDialog( null, e.toString());
        
    }
    
}

Valeu pela dica, estava procurando exatamente por isso mesmo!!
Abraços!

Obrigado.

De nada.
É estranho receber agradecimento 2 anos depois de dar a dica…

:lol:

É porque estou começando com java agora e, como precisei disso, procurei no fórum e achei sua dica!

Abraço!
:slight_smile:

[quote=ViniGodoy]De nada.
É estranho receber agradecimento 2 anos depois de dar a dica…

:lol: [/quote]

Que sejam 5 anos então.

Obrigado! Me ajudou a fazer uma confirmação!

Ola ViniGodoy

Não estranhe !.. porque suas dicas, sejam elas antigas ou recentes, ajudam muitas pessoas …

Isso significa que vc consegue enxergar a necessidade dos outros …

valeu