org.bushe.swing.exception
Class ExceptionDialog

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 org.bushe.swing.exception.ExceptionDialog
All Implemented Interfaces:
java.awt.image.ImageObserver, java.awt.MenuContainer, java.io.Serializable, javax.accessibility.Accessible, javax.swing.RootPaneContainer, javax.swing.WindowConstants

public class ExceptionDialog
extends javax.swing.JDialog

A dialog that displays exception that occur in the AWT Event Queue.

It is fully customizable.

Author:
Michael Bushe michael@bushe.com
See Also:
Serialized Form

Nested Class Summary
 
Nested classes/interfaces inherited from class javax.swing.JDialog
javax.swing.JDialog.AccessibleJDialog
 
Nested classes/interfaces inherited from class java.awt.Dialog
java.awt.Dialog.AccessibleAWTDialog
 
Nested classes/interfaces inherited from class java.awt.Window
java.awt.Window.AccessibleAWTWindow
 
Nested classes/interfaces inherited from class java.awt.Container
java.awt.Container.AccessibleAWTContainer
 
Nested classes/interfaces inherited from class java.awt.Component
java.awt.Component.AccessibleAWTComponent, java.awt.Component.BltBufferStrategy, java.awt.Component.FlipBufferStrategy
 
Field Summary
static int PREFERRED_WIDTH
           
 
Fields inherited from class javax.swing.JDialog
accessibleContext, rootPane, rootPaneCheckingEnabled
 
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
ExceptionDialog(java.awt.Frame ownerFrame, java.lang.Throwable t, boolean modal)
           
ExceptionDialog(java.awt.Frame ownerFrame, java.lang.Throwable t, boolean modal, java.lang.String emailAddress)
           
 
Method Summary
protected  void close()
          Called on window close to dispose.
protected  void copy()
          Called to copy the text in the details component (actually getDetailComponentMessageText()) to the system clipboard.
protected  javax.swing.JComponent createButtonPanelComponent()
          Get the panel of control buttons.
protected  java.awt.Component createDetailsComponent(java.lang.Throwable t)
          The component that shows the component details message.
protected  javax.swing.JLabel createErrorIconLabel()
           
protected  javax.swing.JLabel createErrorMessageComponent()
           
protected  javax.swing.JSeparator createSeparator()
           
protected  javax.swing.JLabel createTitleComponent()
           
protected  java.lang.String determineDetailMessage(java.lang.Throwable t)
          Computes the detail shown in the details component.
protected  void doLayout(javax.swing.JLabel errorIconLabel, javax.swing.JLabel titleLabel, javax.swing.JLabel messageLabel, java.awt.Component buttonPanel, java.awt.Component detailsPanel, java.awt.Component separator)
          Layouts the component on the context pane.
protected  void email()
          Called when the user clicks the email button.
protected  boolean getDefaultDetailsVisible()
          Should the details component be visible by default?
protected  java.lang.String getDetailComponentMessageText()
           
protected  java.lang.String getEmailMessageText()
           
protected  java.lang.String getErrorEmailSubject()
           
protected  javax.swing.Icon getErrorIcon()
           
protected  java.lang.String getMessageText(java.lang.Throwable t)
          Gets the message from the root cause, breaks it up into an 80 character wide html message.
protected  void initUI(java.lang.Throwable t)
          Called during construction to initialze the components and calls doLayout() with them.
 void setEmailAddress(java.lang.String emailAddress)
           
protected  void setupClose()
          Ensures the dialog disposes on close, escape, or X.
 
Methods inherited from class javax.swing.JDialog
addImpl, createRootPane, dialogInit, getAccessibleContext, getContentPane, getDefaultCloseOperation, getGlassPane, getJMenuBar, getLayeredPane, getRootPane, isDefaultLookAndFeelDecorated, isRootPaneCheckingEnabled, paramString, processWindowEvent, remove, setContentPane, setDefaultCloseOperation, setDefaultLookAndFeelDecorated, setGlassPane, setJMenuBar, setLayeredPane, setLayout, setRootPane, setRootPaneCheckingEnabled, update
 
Methods inherited from class java.awt.Dialog
addNotify, getTitle, hide, isModal, isResizable, isUndecorated, setModal, setResizable, setTitle, setUndecorated, show
 
Methods inherited from class java.awt.Window
addPropertyChangeListener, addPropertyChangeListener, addWindowFocusListener, addWindowListener, addWindowStateListener, applyResourceBundle, applyResourceBundle, createBufferStrategy, createBufferStrategy, dispose, finalize, getBufferStrategy, getFocusableWindowState, getFocusCycleRootAncestor, getFocusOwner, getFocusTraversalKeys, getGraphicsConfiguration, getInputContext, getListeners, getLocale, getMostRecentFocusOwner, getOwnedWindows, getOwner, getToolkit, getWarningString, getWindowFocusListeners, getWindowListeners, getWindowStateListeners, isActive, isAlwaysOnTop, isFocusableWindow, isFocusCycleRoot, isFocused, isLocationByPlatform, isShowing, pack, postEvent, processEvent, processWindowFocusEvent, processWindowStateEvent, removeWindowFocusListener, removeWindowListener, removeWindowStateListener, setAlwaysOnTop, setBounds, setCursor, setFocusableWindowState, setFocusCycleRoot, setLocationByPlatform, setLocationRelativeTo, toBack, 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, paint, paintComponents, preferredSize, print, printComponents, processContainerEvent, remove, removeAll, removeContainerListener, removeNotify, 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, getBounds, getBounds, getColorModel, getComponentListeners, getComponentOrientation, getCursor, getDropTarget, getFocusListeners, getFocusTraversalKeysEnabled, getFont, getFontMetrics, getForeground, getGraphics, 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, repaint, requestFocus, requestFocus, requestFocusInWindow, requestFocusInWindow, reshape, resize, resize, setBackground, setBounds, setComponentOrientation, setDropTarget, setEnabled, setFocusable, setFocusTraversalKeysEnabled, setForeground, setIgnoreRepaint, setLocale, setLocation, setLocation, setMaximumSize, setMinimumSize, setName, setPreferredSize, setSize, setSize, setVisible, show, size, toString, transferFocus, transferFocusUpCycle
 
Methods inherited from class java.lang.Object
clone, equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

PREFERRED_WIDTH

public static final int PREFERRED_WIDTH
See Also:
Constant Field Values
Constructor Detail

ExceptionDialog

public ExceptionDialog(java.awt.Frame ownerFrame,
                       java.lang.Throwable t,
                       boolean modal)

ExceptionDialog

public ExceptionDialog(java.awt.Frame ownerFrame,
                       java.lang.Throwable t,
                       boolean modal,
                       java.lang.String emailAddress)
Method Detail

initUI

protected void initUI(java.lang.Throwable t)
Called during construction to initialze the components and calls doLayout() with them.

You can overridde this method to create your own components and layout.

Parameters:
t - the throwable to show

doLayout

protected void doLayout(javax.swing.JLabel errorIconLabel,
                        javax.swing.JLabel titleLabel,
                        javax.swing.JLabel messageLabel,
                        java.awt.Component buttonPanel,
                        java.awt.Component detailsPanel,
                        java.awt.Component separator)
Layouts the component on the context pane.

Parameters:
errorIconLabel - the icon gotten from createErrorIconLabel()
messageLabel - the
buttonPanel -
detailsPanel -

createSeparator

protected javax.swing.JSeparator createSeparator()
Returns:
a JSeparator that gets swapped out with the detail pane.

setupClose

protected void setupClose()
Ensures the dialog disposes on close, escape, or X.


createDetailsComponent

protected java.awt.Component createDetailsComponent(java.lang.Throwable t)
The component that shows the component details message. Calles getComponentDetailMessage(throwable) for the text.

Parameters:
t - the throwable being displayed
Returns:
a scroll pane with a text area by default.

getDetailComponentMessageText

protected java.lang.String getDetailComponentMessageText()
Returns:
the string in the details message pane, returns determineDetailMessage(throwable) by default

getEmailMessageText

protected java.lang.String getEmailMessageText()
Returns:
the string in mail message, returns determineDetailMessage(throwable) by default

createButtonPanelComponent

protected javax.swing.JComponent createButtonPanelComponent()
Get the panel of control buttons.

Returns:
by default a panel with OK, Copy, and, if emailAddress is not null, Email

getDefaultDetailsVisible

protected boolean getDefaultDetailsVisible()
Should the details component be visible by default?

Returns:
flase by default

createErrorIconLabel

protected javax.swing.JLabel createErrorIconLabel()
Returns:
a JLabel with the getErrorIcon() for an icon.

createTitleComponent

protected javax.swing.JLabel createTitleComponent()
Returns:
a JLabel with "The following error occurred:"

createErrorMessageComponent

protected javax.swing.JLabel createErrorMessageComponent()
Returns:
a JLabel with the text of getMessageText(throwable)

getErrorIcon

protected javax.swing.Icon getErrorIcon()
Returns:
the TSOpenPane's error icon from the look and feel (UIManager.getIcon("OptionPane.errorIcon"))

copy

protected void copy()
Called to copy the text in the details component (actually getDetailComponentMessageText()) to the system clipboard.


email

protected void email()
Called when the user clicks the email button.


determineDetailMessage

protected java.lang.String determineDetailMessage(java.lang.Throwable t)
Computes the detail shown in the details component.

Parameters:
t - the throwable we are throwing an exception for
Returns:
by default a timestamp, the root Cause and stack, and full stack

getMessageText

protected java.lang.String getMessageText(java.lang.Throwable t)
Gets the message from the root cause, breaks it up into an 80 character wide html message.

Parameters:
t - the throwable.
Returns:
a nice message for a throwable, ready to be JLabel'ed.

getErrorEmailSubject

protected java.lang.String getErrorEmailSubject()
Returns:
return the subject of the error email. "Application Error" by default.

close

protected void close()
Called on window close to dispose.


setEmailAddress

public void setEmailAddress(java.lang.String emailAddress)