LenientAWTEventProcessor.java

package swingtree.threading;

import org.slf4j.Logger;

import java.util.function.Supplier;

/**
 *  This {@link EventProcessor} implementation is called lenient because it does not
 *  throw any exceptions when a task is not registered by the UI thread.
 *  When this processor is installed
 *  all the event handling will typically be done by the UI thead (the AWT event dispatch thread, short EDT)
 *  simply because all the Swing component events will be executed on the EDT,
 *  however this will not be enforced. <br>
 *  Note that this {@link EventProcessor} will effectively couple the UI
 *  to the business logic of you application with respect to the execution model. <br>
 *  This is not a big problem for simple demo applications,
 *  however, when building larger products it is important to not use the UI thread for
 *  business logic so that the UI stays responsive.
 *  This is why you should prefer the usage of the {@link DecoupledEventProcessor}
 *  alongside the registration of a worker thread through
 *  {@link DecoupledEventProcessor#join()} at {@link EventProcessor#DECOUPLED}.
 *  <br><br>
 *  See {@link swingtree.UI#use(EventProcessor, Supplier)} for more information about the
 *  usage of the {@link EventProcessor} interface.
 */
final class LenientAWTEventProcessor extends BasicSingleThreadedEventProcessor
{
    private static final Logger log = org.slf4j.LoggerFactory.getLogger(LenientAWTEventProcessor.class);

    @Override protected void _tryRunning( Runnable runnable, boolean expectedToBeInvokedFromUIThread ) {
        try {
            runnable.run();
        } catch (Exception e) {
            // If a user wants better logging, they can do it through SLF4J or implement their own EventProcessor.
            log.error("An exception occurred while running a task in the UI thread!", e);
        }
    }
}