Pergunta

Para aplicativos de desktop, é útil ver o Stacktrace na GUI quando o programa travar. Eu implementei isso no Java substituindo o System.err pelo meu próprio manipulador de erros, que redireciona todas as mensagens de erro para um componente GUI e um arquivo de texto.

O problema: algumas bibliotecas por aí (por exemplo, Apache Poi) não apenas escreva para o System.err quando ocorre uma falha, elas também geram mensagens de aviso simples. Isso faz com que a janela de colisão apareça desnecessariamente. Então, minha pergunta é: alguém sabe como (1) mostrar o Stacktrace quando o programa trava, enquanto (2) não o mostra em caso de mensagens de aviso?

Editar] Minha GUI está escrita no SWT.

Foi útil?

Solução

Você pode instalar os próprios manipuladores de exceção. Uma técnica para Swing é explicada aqui: http://ruben42.wordpress.com/2009/03/30/catching-all-truntime-exceptions-in-swing/. Eric Burke também tem Bom artigo sobre este tópico. Outra técnica geral está usando Thread.setDefaultUncaughtExceptionHandler, que é chamado quando o thread morre devido à exceção (de acordo com os comentários no primeiro artigo referenciado, o Thread Swing não morre, portanto, a configuração do manipulador de exceção não capturado não funciona para o Swing, mas o artigo de Eric usa essa técnica).

Seu manipulador de exceção pode exibir erro, registrá -lo ou fazer o que quiser, sem se preocupar com outro código usando fluxos de saída/erro padrão.

Outras dicas

Eu acho que você está abordando o problema do ângulo errado. Você deve exibir uma caixa de diálogo quando houver exceções, não apenas quando houver saída para o System.err. System.err é mais como um utilitário de log.

Para todas as exceções verificadas, você deve lidar com eles caso a caso em seu código. Coloque uma caixa de diálogo, registre -os ou ignore -os (mas nesse caso, verifique se é realmente seguro fazê -lo)

Para pegar as exceções não controladas restantes, você pode fazer algo assim: http://www.javaspecialists.eu/archive/issue081.html, para garantir que você esteja recebendo isso.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top