Centralized exception reporting using javax.swing.AbstractAction

Using a simple variant of the template method design pattern, you should write your own class, e.g. UiAction as a subclass of javax.swing.AbstractAction:

public class UiAction extends javax.swing.AbstractAction {
    final void actionPerformed(ActionEvent ev){
        try{
            actionPerformedWithThrows(ev);
        }catch(Exception ex){
            multex.Swing.report(ev.getSource(), ex);
        }
    }
}          

This class gets the UI component causing the event, uses its parent chain to get the owner frame, and will block it during exception reporting. When using UiAction instead of javax.swing.AbstractAction you must extend UiAction redefining the method actionPerformedWithThrows instead of actionPerformed.

See an example at the Central Exception Reporting Sample Application, site https://app.assembla.com/spaces/excrep/git/source