package org.signalml.app;
import java.awt.AWTEvent;
import org.apache.log4j.Logger;
/**
* Svarog AWT event queue.
*
* It is very good at catching exceptions thrown on AWT event dispatch thread
* (for instance by plugins). :-)
*
* @author Stanislaw Findeisen (Eisenbits)
*/
public class SvarogAWTEventQueue extends java.awt.EventQueue {
protected static final Logger log = Logger.getLogger(SvarogAWTEventQueue.class);
private static boolean queueReplaced = false;
/** Replaces the default AWT event queue by a new instance of this one. */
public static void install() {
if (! queueReplaced) {
synchronized (SvarogAWTEventQueue.class) {
if (! queueReplaced) {
java.awt.Toolkit.getDefaultToolkit().getSystemEventQueue().push(new SvarogAWTEventQueue());
queueReplaced = true;
}
}
}
}
private SvarogAWTEventQueue() {
super();
}
@Override
/**
* Calls {@link java.awt.EventQueue#dispatchEvent} and catches any
* {@link Throwable}s. If any is caught,
* {@link SvarogExceptionHandler#handleAWT(Throwable)} is called.
*
* @author Stanislaw Findeisen (Eisenbits)
*/
protected void dispatchEvent(AWTEvent newEvent) {
try {
super.dispatchEvent(newEvent);
} catch (Error t) {
try {
SvarogExceptionHandler.getSharedInstance().handleAWT(t);
} catch (RuntimeException e) {
log.error("Error in exception handler!", e);
}
throw t;
} catch (Exception t) {
SvarogExceptionHandler.getSharedInstance().handleAWT(t);
}
}
}