package org.signalml.app; import java.awt.Window; import org.apache.log4j.Logger; import org.signalml.app.view.common.dialogs.errors.Dialogs; /** * Svarog exception handler. * * It is a singleton. * * @author Stanislaw Findeisen (Eisenbits) */ public class SvarogExceptionHandler implements java.lang.Thread.UncaughtExceptionHandler { protected static final Logger logger = Logger.getLogger(SvarogExceptionHandler.class); private static SvarogExceptionHandler instance = null; private static boolean installed = false; /** * Installs SvarogExceptionHandler instance as default exception handler. * * @author Stanislaw Findeisen (Eisenbits) * @see Thread#setDefaultUncaughtExceptionHandler(java.lang.Thread.UncaughtExceptionHandler) */ public static void install() { if (!installed) { synchronized (SvarogExceptionHandler.class) { if (!installed) { Thread.setDefaultUncaughtExceptionHandler(getSharedInstance()); installed = true; logger.debug("SvarogExceptionHandler successfully installed!"); } } } } /** Returns the shared instance. */ protected static SvarogExceptionHandler getSharedInstance() { if (instance == null) { synchronized (SvarogExceptionHandler.class) { if (instance == null) instance = new SvarogExceptionHandler(); } } return instance; } private SvarogExceptionHandler() { } private void displayUserMessage(Throwable t) { Dialogs.showExceptionDialog((Window) null, t); } protected void handleAWT(Throwable t) { logger.error("AWT exception handler", t); displayUserMessage(t); } @Override public void uncaughtException(Thread t, Throwable e) { logger.error("uncaught exception in thread [" + (t.getId()) + "/" + (t.getName()) + "]", e); displayUserMessage(e); } }