También puede envolver el EventQueue como en este ejemplo: Catch exceptions in javax.swing application
Si también desea registrar la excepción, aquí le doy otra opción, tal vez con más código, pero funciona correctamente.
import java.awt.AWTEvent;
import java.awt.EventQueue;
import javax.swing.JOptionPane;
import org.slf4j.Logger;
public class QueueEvenement extends EventQueue {
// CONSTRUCTOR
public QueueEvenement(Logger logger) {
super();
this.logger = logger;
}
protected void dispatchEvent(AWTEvent newEvent) {
try {
super.dispatchEvent(newEvent);
} catch (Throwable t) {
// Write log
logger.error(String.format("Erreur inconnue (%s - %s)",
t.getClass().getName(), t.getLocalizedMessage()));
}
}
}
Después de codificar esta clase, puede instalar la envoltura con la siguiente línea:
Toolkit.getDefaultToolkit().getSystemEventQueue().push(new EventQueueProxy());
Esta solución tiene la ventaja de captura sólo el gráfico, que le da una mayor flexibilidad cuando se tiene que differentite entre excepciones gráficas (incluidos los manejadores de eventos) y las otras posibles excepciones.
¡Recuerdos!
¿Es obligatoria la segunda línea ('System.setProperty ...')? – umbr
sun.awt.exception.handler capturará Excepciones cuando haya un cuadro de diálogo modal. ¿Correcto? –
@umbr: vea http://stackoverflow.com/questions/5794472/why-bother-with-setting-the-sun-awt-exception-handler-property –