Quisiéramos dejar un rastro en los registros de nuestras aplicaciones de estas excepciones; por defecto, Java simplemente las envía a la consola.¿Cómo puedo detectar excepciones de hilos AWT en Java?
Respuesta
Existe una distinción entre las excepciones no detectadas en el EDT y fuera del EDT.
Another question has a solution for both pero si quieres sólo la parte EDT masticado ...
class AWTExceptionHandler {
public void handle(Throwable t) {
try {
// insert your exception handling code here
// or do nothing to make it go away
} catch (Throwable t) {
// don't let the exception get thrown out, will cause infinite looping!
}
}
public static void registerExceptionHandler() {
System.setProperty('sun.awt.exception.handler', AWTExceptionHandler.class.getName())
}
}
Hay dos maneras:
- /* Instalar un Thread.UncaughtExceptionHandler en la EDT */
- Establecer una propiedad del sistema: System.setProperty ("sun.awt.exception.handler", MyExceptionHandler.class.getName());
No sé si este último funciona en jvms no SUN.
-
De hecho, la primera no es correcto, es sólo un mecanismo para detectar un hilo estrellado.
El uso de Thread.UncaufhtExceptionHandler no detectará las excepciones EDT. La clase EDT capta todos los objetos susceptibles de ser arrojados y los imprime en lugar de dejarlos desenrollar todo el hilo. – shemnon
También le faltan detalles sobre lo que se necesita en la segunda opción, la clase MyExceptionHandler debe tener un método de instancia de manejador (Throwable) accesible y un constructor sin argumentos accesible. – shemnon
Una pequeña adición a shemnon s anwer:
La primera vez que un RuntimeException no detectada (o error) se produce en el EDT está buscando la propiedad "sun.awt.exception.handler" e intenta cargar la clase asociada a la propiedad. EDT necesita que la clase Handler tenga un constructor predeterminado, de lo contrario, el EDT no lo usará.
Si necesita incorporar un poco más de dinámica en la historia de manejo, está obligado a hacerlo con operaciones estáticas, porque la clase está instanciada por el EDT y, por lo tanto, no tiene posibilidad de acceder a otros recursos que no sean estáticos. Aquí está el código del controlador de excepción de nuestro marco Swing que estamos usando. Fue escrito para Java 1.4 y funcionó bastante bien allí:
public class AwtExceptionHandler {
private static final Logger LOGGER = LoggerFactory.getLogger(AwtExceptionHandler.class);
private static List exceptionHandlerList = new LinkedList();
/**
* WARNING: Don't change the signature of this method!
*/
public void handle(Throwable throwable) {
if (exceptionHandlerList.isEmpty()) {
LOGGER.error("Uncatched Throwable detected", throwable);
} else {
delegate(new ExceptionEvent(throwable));
}
}
private void delegate(ExceptionEvent event) {
for (Iterator handlerIterator = exceptionHandlerList.iterator(); handlerIterator.hasNext();) {
IExceptionHandler handler = (IExceptionHandler) handlerIterator.next();
try {
handler.handleException(event);
if (event.isConsumed()) {
break;
}
} catch (Throwable e) {
LOGGER.error("Error while running exception handler: " + handler, e);
}
}
}
public static void addErrorHandler(IExceptionHandler exceptionHandler) {
exceptionHandlerList.add(exceptionHandler);
}
public static void removeErrorHandler(IExceptionHandler exceptionHandler) {
exceptionHandlerList.remove(exceptionHandler);
}
}
Espero que ayude.
Desde Java 7, tiene que hacerlo de manera diferente ya que el truco sun.awt.exception.handler
ya no funciona.
Here is the solution (de Uncaught AWT Exceptions in Java 7).
// Regular Exception
Thread.setDefaultUncaughtExceptionHandler(new ExceptionHandler());
// EDT Exception
SwingUtilities.invokeAndWait(new Runnable()
{
public void run()
{
// We are in the event dispatching thread
Thread.currentThread().setUncaughtExceptionHandler(new ExceptionHandler());
}
});
- 1. excepciones de hilos de java
- 2. Java: manejo de excepciones en hilos secundarios
- 3. Cómo detectar excepciones en FutureTask
- 4. ¿Dónde puedo detectar Excepciones en MVVM?
- 5. Manejo de excepciones en hilos
- 6. Cómo detectar excepciones
- 7. cómo detectar excepciones y continuar el procesamiento en Java
- 8. Cómo detectar violaciones de sincronización con Java
- 9. Java awt font spacing options
- 10. Java: crea gráficos sin awt?
- 11. ¿Hilos dentro de hilos en Java?
- 12. ¿Cómo puedo ver un registro completo de excepciones en JAVA?
- 13. Afirmando excepciones en Java, ¿cómo?
- 14. ¿Debería detectar todas las excepciones?
- 15. Cómo detectar el 'Guardar como PDF ...' fue seleccionado de un AWT PrinterJob en OS X
- 16. Hilos Java vs Hilos OS
- 17. ¿Cómo puedo detectar caracteres Unicode en una cadena de Java?
- 18. ¿Cómo lidiar con las excepciones de acceso de hilos cruzados?
- 19. Auditoría Java: sistema para detectar excepciones lanzadas/atrapadas (¿aop?)
- 20. ¿Qué excepciones no debería detectar?
- 21. Cómo detectar excepciones de solicitud de cliente http en node.js
- 22. Hilos en Java
- 23. reutilización de hilos java
- 24. Métodos Java Ejecutando en hilos
- 25. ¿Cómo puedo obtener express.js para detectar e informar excepciones de tiempo de ejecución en llamadas AJAX
- 26. ¿Cómo puedo detectar excepciones de la confirmación de transacciones gestionadas en contenedores?
- 27. hilos de java en libGDX
- 28. Java AWT/SWT/Swing: ¿cómo planificar una GUI?
- 29. Java haciendo un 'punto/píxel' En swing/awt
- 30. Doble búfer con awt
No hay necesidad de atrapar arrojable. No habrá bucle infinito. java.awt.EventDispatchThread.handleException detecta cualquier excepción para usted. –
Dijo 'clases AWTExceptionHandler' –