org.thdl.util
Class ThdlActionListener

java.lang.Object
  |
  +--org.thdl.util.ThdlActionListener
All Implemented Interfaces:
ActionListener, EventListener

public class ThdlActionListener
extends Object
implements ActionListener

This ActionListener is like any other except in the way that it handles exceptions or errors thrown during the execution of actionPerformed(). Because event listeners are on threads, an exception during actionPerformed() is just printed out on the console by java.awt.EventDispatchThread.run(). It does not cause the program to terminate. In our code, it helps developers more quickly get to the root of a problem if the program terminates as soon after a problem as possible. Thus, this class calls System.exit(1) when an exception is throw by theRealActionPerformed(), which is the method that subclasses should implement.

Author:
David Chandler Here is a pertinent Usenet thread from http://groups.google.com/groups?hl=en&lr=&ie=UTF-8&oe=utf-8&threadm=6ntgl6%244hl%241%40tarantula.europe.shiva.com&rnum=2&prev=/groups%3Fq%3Dexception%2BactionPerformed%26hl%3Den%26lr%3D%26ie%3DUTF-8%26oe%3Dutf-8%26selm%3D6ntgl6%25244hl%25241%2540tarantula.europe.shiva.com%26rnum%3D2:
From: Denis (denisb@europe.shiva.com)
Subject: Exception in event handlers
 
View this article only
Newsgroups: comp.lang.java.gui, comp.lang.java.help, comp.lang.java.programmer
Date: 1998/07/07

Hi everyone !

I've got a wee question regarding propagation of exceptions in event
handlers :
here's the fun :

Say, you've got a method A() that is called from within an event handler
(mostly it'll be in actionPerformed(ActionEvent) from ActionListener
interface).
Now this A() method produces an exception. This exception will be propagated
up to the caller of actionPerformed which is into the event handler queue.
This exception never gets propagated higher than the handler (and produces a
message "exception occured in event handler")

Now I would like this exception NOT to be caught there but to propagate
until the program terminates or it is caught somewhere else.

Is there a way to do that ? There's no mean to re-throw that exception as
the event handler is part of the core java.

Basically what I would like to do is catch ANY exception that occurs in a
java application in order to display a message box, without having to put
try{} catch{} blocks all other the place...

Thanks for any help on that

Chunk of code to illustrate :

class MyClass extends Object implements ActionListener {
// blah blah

    public void actionPerformed(ActionEvent event) {
        A(); //May throw an exception here but the actionPerformed is called
        // from the event handler and the exception is caught into it

        //So the actionPerformed finishes because of the exception but the
        // rest of the app is likely to be in an unstable state, but still running
    }

   // So here the exception has been caught without an explicit try{}
   // catch{} WHICH I DONT WANT

   //You then can happily do something else....even if A() failed....

}//MyClass

Message 2 in thread
From: David Holmes (dholmes@mri.mq.edu.au)
Subject: Re: Exception in event handlers
 
View this article only
Newsgroups: comp.lang.java.gui, comp.lang.java.help, comp.lang.java.programmer
Date: 1998/07/09

Denis <denisb@europe.shiva.com> wrote in article
<6ntgl6$4hl$1@tarantula.europe.shiva.com>...
> Now I would like this exception NOT to be caught there but to propagate
> until the program terminates or it is caught somewhere else.

Once an exception is caught it is up to the catcher what to do with it. The
event dispatch thread simply catches the exception and tells you about it.
There is no way to make this exception go any further - indeed there is
nowhere further for it to go. Exceptions occur per-thread and if the thread
doesn't catch it the thread will terminate. A more sophisticated event
mechanism might allow you to register a handler/listener to take some
action when this occurred but the current AWT does not.

David
See Also:
ThdlAbstractAction

Constructor Summary
ThdlActionListener()
           
 
Method Summary
 void actionPerformed(ActionEvent e)
          Subclasses don't override this.
protected  void theRealActionPerformed(ActionEvent e)
          Subclasses should override this method to do the real action performed by this action listener.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ThdlActionListener

public ThdlActionListener()
Method Detail

actionPerformed

public final void actionPerformed(ActionEvent e)
Subclasses don't override this. Instead, they override theRealActionPerformed().

Specified by:
actionPerformed in interface ActionListener
See Also:
actionPerformed(ActionEvent)

theRealActionPerformed

protected void theRealActionPerformed(ActionEvent e)
                               throws Throwable
Subclasses should override this method to do the real action performed by this action listener.

Throwable
See Also:
actionPerformed(ActionEvent)


These API docs were created 02/02/2003 08:19 PM.
Copyright © 2001-2002 Tibetan and Himalayan Digital Library. All Rights Reserved.
Hosted by SourceForge_Logo