private Future<?> display(final boolean error) {
        final String msg = this.getMessage();
        if (error) {
            getLogger().log(Level.SEVERE, null, this);
        } else {
            if (this.getCause() != null) {
                getLogger().log(Level.INFO, null, this);
            }
        }
        if (!GraphicsEnvironment.isHeadless() || forceUI) {
            if (SwingUtilities.isEventDispatchThread()) {
                showMsg(msg, error);
            } else {
                final FutureTask<?> run = new FutureTask<Object>(new Runnable() {
                    public void run() {
                        showMsg(msg, error);
                    }
                }, null);
                if (error) {
                    try {
                        SwingUtilities.invokeAndWait(run);
                    } catch (Exception e) {
                        e.printStackTrace();
                        System.exit(1);
                    }
                } else {
                    SwingUtilities.invokeLater(run);
                }
                return run;
            }
        }
        return null;
    }