bb.gui
Class ThrowableDialog

java.lang.Object
  extended by java.awt.Component
      extended by java.awt.Container
          extended by java.awt.Window
              extended by java.awt.Dialog
                  extended by javax.swing.JDialog
                      extended by bb.gui.ThrowableDialog
All Implemented Interfaces:
ImageObserver, MenuContainer, Serializable, Accessible, RootPaneContainer, WindowConstants
Direct Known Subclasses:
ThrowableDialog.UnitTest.TestDialog

public class ThrowableDialog
extends JDialog

Subclass of JDialog which is used to notify the user of a caught Throwable.

Normally, to display an error to the user, one might simply use code like


        String message =
                "Program encountered an error." + "\n" +
                "Type: " + t.getClass().getName() + "\n" +
                "Message: " + t.getMessage() + "\n";
        JOptionPane.showMessageDialog(frame, message, "SlideShow Error", JOptionPane.ERROR_MESSAGE);
 

As an alternative, using this class offers the following additional functionality:

  1. the dialog may/may not be modal
  2. the user may show/hide the Throwable's stacktrace
  3. the user may chose to exit the JVM

Like typical Java GUI code, this class is not multithread safe: it expects to only be called by EventQueue's dispatch thread. This threading limitation is checked in every public method.

See Also:
Serialized Form

Nested Class Summary
static class ThrowableDialog.UnitTest
          See the Overview page of the project's javadocs for a general description of this unit test class.
 
Nested classes/interfaces inherited from class javax.swing.JDialog
JDialog.AccessibleJDialog
 
Nested classes/interfaces inherited from class java.awt.Dialog
Dialog.AccessibleAWTDialog, Dialog.ModalExclusionType, Dialog.ModalityType
 
Nested classes/interfaces inherited from class java.awt.Window
Window.AccessibleAWTWindow
 
Nested classes/interfaces inherited from class java.awt.Container
Container.AccessibleAWTContainer
 
Nested classes/interfaces inherited from class java.awt.Component
Component.AccessibleAWTComponent, Component.BaselineResizeBehavior, Component.BltBufferStrategy, Component.FlipBufferStrategy
 
Field Summary
private  String message
           
private  Component owner
          The Frame or Dialog that owns this instance; may be null.
private static long serialVersionUID
           
private  boolean showOnlyBasicInfo
           
private  Throwable throwable
           
 
Fields inherited from class javax.swing.JDialog
accessibleContext, rootPane, rootPaneCheckingEnabled
 
Fields inherited from class java.awt.Dialog
DEFAULT_MODALITY_TYPE
 
Fields inherited from class java.awt.Component
BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENT
 
Fields inherited from interface javax.swing.WindowConstants
DISPOSE_ON_CLOSE, DO_NOTHING_ON_CLOSE, EXIT_ON_CLOSE, HIDE_ON_CLOSE
 
Fields inherited from interface java.awt.image.ImageObserver
ABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, WIDTH
 
Constructor Summary
ThrowableDialog(Dialog owner, String title, boolean modal, String message, Throwable throwable)
          Constructs a new ThrowableDialog instance.
ThrowableDialog(Frame owner, String title, boolean modal, String message, Throwable throwable)
          Constructs a new ThrowableDialog instance.
 
Method Summary
protected  JComponent buildButtons()
           
protected  JComponent buildGui()
           
protected  JComponent buildInfo()
           
 String getMessage()
          Accessor for the message field.
 Throwable getThrowable()
          Accessor for the throwable field.
protected  void init(String title, boolean modal, String message, Throwable throwable)
          Initialization routine called by the 2 public constructors which contains code common to them.
protected  void playSound()
          This implementation calls Sounds.playErrorMinor().
protected  void programExit()
          This implementation calls System.exit(1).
protected  void refresh()
           
 void setMessage(String message)
          Mutator for the message field.
 void setThrowable(Throwable throwable)
          Mutator for the throwable field.
 
Methods inherited from class javax.swing.JDialog
addImpl, createRootPane, dialogInit, getAccessibleContext, getContentPane, getDefaultCloseOperation, getGlassPane, getGraphics, getJMenuBar, getLayeredPane, getRootPane, getTransferHandler, isDefaultLookAndFeelDecorated, isRootPaneCheckingEnabled, paramString, processWindowEvent, remove, repaint, setContentPane, setDefaultCloseOperation, setDefaultLookAndFeelDecorated, setGlassPane, setJMenuBar, setLayeredPane, setLayout, setRootPane, setRootPaneCheckingEnabled, setTransferHandler, update
 
Methods inherited from class java.awt.Dialog
addNotify, getModalityType, getTitle, hide, isModal, isResizable, isUndecorated, setModal, setModalityType, setResizable, setTitle, setUndecorated, setVisible, show, toBack
 
Methods inherited from class java.awt.Window
addPropertyChangeListener, addPropertyChangeListener, addWindowFocusListener, addWindowListener, addWindowStateListener, applyResourceBundle, applyResourceBundle, createBufferStrategy, createBufferStrategy, dispose, getBufferStrategy, getFocusableWindowState, getFocusCycleRootAncestor, getFocusOwner, getFocusTraversalKeys, getGraphicsConfiguration, getIconImages, getInputContext, getListeners, getLocale, getModalExclusionType, getMostRecentFocusOwner, getOwnedWindows, getOwner, getOwnerlessWindows, getToolkit, getWarningString, getWindowFocusListeners, getWindowListeners, getWindows, getWindowStateListeners, isActive, isAlwaysOnTop, isAlwaysOnTopSupported, isFocusableWindow, isFocusCycleRoot, isFocused, isLocationByPlatform, isShowing, pack, paint, postEvent, processEvent, processWindowFocusEvent, processWindowStateEvent, removeNotify, removeWindowFocusListener, removeWindowListener, removeWindowStateListener, reshape, setAlwaysOnTop, setBounds, setBounds, setCursor, setFocusableWindowState, setFocusCycleRoot, setIconImage, setIconImages, setLocationByPlatform, setLocationRelativeTo, setMinimumSize, setModalExclusionType, setSize, setSize, toFront
 
Methods inherited from class java.awt.Container
add, add, add, add, add, addContainerListener, applyComponentOrientation, areFocusTraversalKeysSet, countComponents, deliverEvent, doLayout, findComponentAt, findComponentAt, getAlignmentX, getAlignmentY, getComponent, getComponentAt, getComponentAt, getComponentCount, getComponents, getComponentZOrder, getContainerListeners, getFocusTraversalPolicy, getInsets, getLayout, getMaximumSize, getMinimumSize, getMousePosition, getPreferredSize, insets, invalidate, isAncestorOf, isFocusCycleRoot, isFocusTraversalPolicyProvider, isFocusTraversalPolicySet, layout, list, list, locate, minimumSize, paintComponents, preferredSize, print, printComponents, processContainerEvent, remove, removeAll, removeContainerListener, setComponentZOrder, setFocusTraversalKeys, setFocusTraversalPolicy, setFocusTraversalPolicyProvider, setFont, transferFocusBackward, transferFocusDownCycle, validate, validateTree
 
Methods inherited from class java.awt.Component
action, add, addComponentListener, addFocusListener, addHierarchyBoundsListener, addHierarchyListener, addInputMethodListener, addKeyListener, addMouseListener, addMouseMotionListener, addMouseWheelListener, bounds, checkImage, checkImage, coalesceEvents, contains, contains, createImage, createImage, createVolatileImage, createVolatileImage, disable, disableEvents, dispatchEvent, enable, enable, enableEvents, enableInputMethods, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, getBackground, getBaseline, getBaselineResizeBehavior, getBounds, getBounds, getColorModel, getComponentListeners, getComponentOrientation, getCursor, getDropTarget, getFocusListeners, getFocusTraversalKeysEnabled, getFont, getFontMetrics, getForeground, getHeight, getHierarchyBoundsListeners, getHierarchyListeners, getIgnoreRepaint, getInputMethodListeners, getInputMethodRequests, getKeyListeners, getLocation, getLocation, getLocationOnScreen, getMouseListeners, getMouseMotionListeners, getMousePosition, getMouseWheelListeners, getName, getParent, getPeer, getPropertyChangeListeners, getPropertyChangeListeners, getSize, getSize, getTreeLock, getWidth, getX, getY, gotFocus, handleEvent, hasFocus, imageUpdate, inside, isBackgroundSet, isCursorSet, isDisplayable, isDoubleBuffered, isEnabled, isFocusable, isFocusOwner, isFocusTraversable, isFontSet, isForegroundSet, isLightweight, isMaximumSizeSet, isMinimumSizeSet, isOpaque, isPreferredSizeSet, isValid, isVisible, keyDown, keyUp, list, list, list, location, lostFocus, mouseDown, mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp, move, nextFocus, paintAll, prepareImage, prepareImage, printAll, processComponentEvent, processFocusEvent, processHierarchyBoundsEvent, processHierarchyEvent, processInputMethodEvent, processKeyEvent, processMouseEvent, processMouseMotionEvent, processMouseWheelEvent, remove, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removeMouseWheelListener, removePropertyChangeListener, removePropertyChangeListener, repaint, repaint, repaint, requestFocus, requestFocus, requestFocusInWindow, requestFocusInWindow, resize, resize, setBackground, setComponentOrientation, setDropTarget, setEnabled, setFocusable, setFocusTraversalKeysEnabled, setForeground, setIgnoreRepaint, setLocale, setLocation, setLocation, setMaximumSize, setName, setPreferredSize, show, size, toString, transferFocus, transferFocusUpCycle
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

serialVersionUID

private static final long serialVersionUID
See Also:
Constant Field Values

owner

private final Component owner
The Frame or Dialog that owns this instance; may be null.


message

private String message

throwable

private Throwable throwable

showOnlyBasicInfo

private boolean showOnlyBasicInfo
Constructor Detail

ThrowableDialog

public ThrowableDialog(Dialog owner,
                       String title,
                       boolean modal,
                       String message,
                       Throwable throwable)
                throws IllegalArgumentException,
                       IllegalStateException
Constructs a new ThrowableDialog instance.

Parameters:
owner - the owner Dialog that this JDialog will be attached to; may be null
title - the dialog's title
modal - specifies whether or not this JDialog is a modal dialog
throwable - the Throwable to report

Throws:
IllegalArgumentException - if message is blank; throwable == null
IllegalStateException - if calling thread is not EventQueue's dispatch thread

ThrowableDialog

public ThrowableDialog(Frame owner,
                       String title,
                       boolean modal,
                       String message,
                       Throwable throwable)
                throws IllegalArgumentException,
                       IllegalStateException
Constructs a new ThrowableDialog instance.

Parameters:
owner - the owner Frame that this JDialog will be attached to; may be null
title - the dialog's title
modal - specifies whether or not this JDialog is a modal dialog
throwable - the Throwable to report

Throws:
IllegalArgumentException - if message is blank; throwable == null
IllegalStateException - if calling thread is not EventQueue's dispatch thread
Method Detail

init

protected void init(String title,
                    boolean modal,
                    String message,
                    Throwable throwable)
             throws IllegalArgumentException
Initialization routine called by the 2 public constructors which contains code common to them. This method was written because both those constructors must do a call to super as their first line, so they cannot do a call to this.

Throws:
IllegalArgumentException - if message is blank; throwable == null

getMessage

public String getMessage()
                  throws IllegalStateException
Accessor for the message field.

Throws:
IllegalStateException - if calling thread is not EventQueue's dispatch thread

setMessage

public void setMessage(String message)
                throws IllegalArgumentException,
                       IllegalStateException
Mutator for the message field.

Throws:
IllegalArgumentException - if message is blank
IllegalStateException - if calling thread is not EventQueue's dispatch thread

getThrowable

public Throwable getThrowable()
                       throws IllegalStateException
Accessor for the throwable field.

Throws:
IllegalStateException - if calling thread is not EventQueue's dispatch thread

setThrowable

public void setThrowable(Throwable throwable)
                  throws IllegalArgumentException,
                         IllegalStateException
Mutator for the throwable field.

Throws:
IllegalArgumentException - if throwable == null
IllegalStateException - if calling thread is not EventQueue's dispatch thread

refresh

protected void refresh()

buildGui

protected JComponent buildGui()

buildInfo

protected JComponent buildInfo()

buildButtons

protected JComponent buildButtons()

playSound

protected void playSound()
This implementation calls Sounds.playErrorMinor(). Subclasses may override to play a different sound, or nothign at all.


programExit

protected void programExit()
This implementation calls System.exit(1). Subclasses may override to call a program specific shutdown sequence instead.