Pregunta

Estoy trabajando en una aplicación multiplataforma en Java que actualmente funciona bien en Windows, Linux y MacOS X.Estoy tratando de encontrar una buena manera de detectar (y manejar) los "bloqueos".¿Existe una forma sencilla y multiplataforma de detectar "fallos" en Java y hacer algo en respuesta?

Supongo que por "bloqueos" me refiero a excepciones no detectadas.Sin embargo, el código usa algo de JNI, por lo que sería bueno poder detectar fallas debido a un código JNI incorrecto, pero tengo la sensación de que es específico de JVM.

¿Fue útil?

Solución

Para un manejo sencillo y general, puede utilizar el siguiente método estático en Hilo.Del Javadoc:

hoyo estatico setDefaultUncaughtExceptionHandler(Thread.UncaughtExceptionHandler eh)
Establezca el controlador predeterminado que se invoca cuando un subproceso finaliza abruptamente debido a una excepción no detectada y no se ha definido ningún otro controlador para ese subproceso.

Esta es una forma muy amplia de abordar errores o excepciones no comprobadas que tal vez no se detecten en ningún otro lugar.

Nota al margen: Es mejor si el código puede detectar, registrar y/o recuperar excepciones más cerca del origen del problema.Reservaría este tipo de manejo generalizado de accidentes para situaciones totalmente irrecuperables (es decir,subclases de java.lang.Error).Trate de evitar la posibilidad de una Excepción en tiempo de ejecución nunca quedar completamente sin detectar, ya que podría ser posible (y preferible) que el software sobreviva a eso.

Otros consejos

Para manejar excepciones no detectadas, puede proporcionar un nuevo ThreadGroup que proporcione una implementación de ThreadGroup.uncaughtException(...).Luego puede detectar cualquier excepción no detectada y manejarla adecuadamente (p. ej.enviar un registro de fallos a casa).

No puedo ayudarlo en el frente de JNI, probablemente haya una manera de usar un ejecutable contenedor nativo antes de llamar a la JVM, pero ese ejecutable necesitará conocer todas las JVM posibles a las que podría estar llamando y cómo falla la indicación y dónde. se colocan registros de fallos, etc.

No estoy seguro de si esto es lo que necesita, pero también puede detectar si se ha producido una excepción desde su código nativo.Ver http://java.sun.com/javase/6/docs/technotes/guides/jni/spec/functions.html#wp5234 para más información.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top