Pergunta

Estou trabalhando em um aplicativo multiplataforma em Java que atualmente funciona bem no Windows, Linux e MacOS X.Estou tentando descobrir uma boa maneira de detectar (e lidar) com 'travamentos'.Existe uma maneira fácil e multiplataforma de detectar 'falhas' em Java e fazer algo em resposta?

Acho que por 'travamentos' quero dizer exceções não detectadas.No entanto, o código usa algum JNI, então seria bom poder detectar travamentos de código JNI incorreto, mas tenho a sensação de que isso é específico da JVM.

Foi útil?

Solução

Para um tratamento simples e abrangente, você pode usar o seguinte método estático em Fio.Do Javadoc:

vazio estático setDefaultUncaughtExceptionHandler(Thread.UncaughtExceptionHandler Eh)
Defina o manipulador padrão invocado quando um thread termina abruptamente devido a uma exceção não detectada e nenhum outro manipulador foi definido para esse thread.

Esta é uma forma muito ampla de lidar com erros ou exceções não verificadas que podem não ser detectadas em nenhum outro lugar.

Nota: É melhor que o código possa capturar, registrar e/ou recuperar de exceções mais próximas da origem do problema.Eu reservaria esse tipo de tratamento generalizado de falhas para situações totalmente irrecuperáveis ​​(ou seja,subclasses de java.lang.Error).Tente evitar a possibilidade de Exceção de tempo de execução nunca passar despercebido, já que pode ser possível – e preferível – que o software sobreviva a isso.

Outras dicas

Para lidar com exceções não detectadas, você pode fornecer um novo ThreadGroup que fornece uma implementação de ThreadGroup.uncaughtException(...).Você pode então capturar quaisquer exceções não detectadas e tratá-las adequadamente (por exemplo,envie um registro de falha para casa).

Não posso ajudá-lo na frente do JNI, provavelmente há uma maneira de usar um executável wrapper nativo antes de chamar a JVM, mas esse executável precisará saber sobre todas as JVMs possíveis que ele poderia estar chamando e como a indicação trava e onde logs de falhas são colocados etc.

Não tenho certeza se é isso que você precisa, mas você também pode detectar se ocorreu uma exceção em seu código nativo.Ver http://java.sun.com/javase/6/docs/technotes/guides/jni/spec/functions.html#wp5234 para mais informações.

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