/*
 * SwingThreadUtils.java
 *
 * Created on December 3, 2006, 6:01 PM
 *
 */

package edu.oregonstate.cartography.app;

import java.lang.reflect.InvocationTargetException;
import javax.swing.SwingUtilities;

/**
 *
 * @author Bernhard Jenny, Institute of Cartography, ETH Zurich
 */
public class SwingThreadUtils {
    
    /**
     * A wrapper around SwingUtilities.invokeAndWait() that makes sure that 
     * SwingUtilities.invokeAndWait() is only called when the current thread is 
     * not the AWT event dispatching thread, as required by the documentation
     * of SwingUtilities.invokeAndWait(); plus catches exceptions thrown by 
     * SwingUtilities.invokeAndWait().
     * @param runnable The Runnable to call in the event dispatch thread.
     */
    public static void invokeAndWait(Runnable runnable) {
        try {
            if (SwingUtilities.isEventDispatchThread())
                runnable.run();
            else
                SwingUtilities.invokeAndWait(runnable);
        } catch (InvocationTargetException | InterruptedException ex) {
            ex.printStackTrace();
        }
    }

}
