/*
* Copyright (c) 1998, 2006, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package java.awt.event;
import java.awt.ActiveEvent;
import java.awt.AWTEvent;
An event which executes the run()
method on a Runnable
when dispatched by the AWT event dispatcher thread. This class can
be used as a reference implementation of ActiveEvent
rather
than declaring a new class and defining dispatch()
.
Instances of this class are placed on the EventQueue
by calls
to invokeLater
and invokeAndWait
. Client code
can use this fact to write replacement functions for invokeLater
and invokeAndWait
without writing special-case code
in any AWTEventListener
objects.
Author: Fred Ecks, David Mendenhall See Also: Since: 1.2
/**
* An event which executes the <code>run()</code> method on a <code>Runnable
* </code> when dispatched by the AWT event dispatcher thread. This class can
* be used as a reference implementation of <code>ActiveEvent</code> rather
* than declaring a new class and defining <code>dispatch()</code>.<p>
*
* Instances of this class are placed on the <code>EventQueue</code> by calls
* to <code>invokeLater</code> and <code>invokeAndWait</code>. Client code
* can use this fact to write replacement functions for <code>invokeLater
* </code> and <code>invokeAndWait</code> without writing special-case code
* in any <code>AWTEventListener</code> objects.
*
* @author Fred Ecks
* @author David Mendenhall
*
* @see java.awt.ActiveEvent
* @see java.awt.EventQueue#invokeLater
* @see java.awt.EventQueue#invokeAndWait
* @see AWTEventListener
*
* @since 1.2
*/
public class InvocationEvent extends AWTEvent implements ActiveEvent {
Marks the first integer id for the range of invocation event ids.
/**
* Marks the first integer id for the range of invocation event ids.
*/
public static final int INVOCATION_FIRST = 1200;
The default id for all InvocationEvents.
/**
* The default id for all InvocationEvents.
*/
public static final int INVOCATION_DEFAULT = INVOCATION_FIRST;
Marks the last integer id for the range of invocation event ids.
/**
* Marks the last integer id for the range of invocation event ids.
*/
public static final int INVOCATION_LAST = INVOCATION_DEFAULT;
The Runnable whose run() method will be called.
/**
* The Runnable whose run() method will be called.
*/
protected Runnable runnable;
The (potentially null) Object whose notifyAll() method will be called
immediately after the Runnable.run() method returns.
/**
* The (potentially null) Object whose notifyAll() method will be called
* immediately after the Runnable.run() method returns.
*/
protected Object notifier;
Set to true if dispatch() catches Throwable and stores it in the
exception instance variable. If false, Throwables are propagated up
to the EventDispatchThread's dispatch loop.
/**
* Set to true if dispatch() catches Throwable and stores it in the
* exception instance variable. If false, Throwables are propagated up
* to the EventDispatchThread's dispatch loop.
*/
protected boolean catchExceptions;
The (potentially null) Exception thrown during execution of the
Runnable.run() method. This variable will also be null if a particular
instance does not catch exceptions.
/**
* The (potentially null) Exception thrown during execution of the
* Runnable.run() method. This variable will also be null if a particular
* instance does not catch exceptions.
*/
private Exception exception = null;
The (potentially null) Throwable thrown during execution of the
Runnable.run() method. This variable will also be null if a particular
instance does not catch exceptions.
/**
* The (potentially null) Throwable thrown during execution of the
* Runnable.run() method. This variable will also be null if a particular
* instance does not catch exceptions.
*/
private Throwable throwable = null;
The timestamp of when this event occurred.
See Also: @serial
/**
* The timestamp of when this event occurred.
*
* @serial
* @see #getWhen
*/
private long when;
/*
* JDK 1.1 serialVersionUID.
*/
private static final long serialVersionUID = 436056344909459450L;
Constructs an InvocationEvent
with the specified
source which will execute the runnable's run
method when dispatched.
This is a convenience constructor. An invocation of the form
InvocationEvent(source, runnable)
behaves in exactly the same way as the invocation of
InvocationEvent
(source, runnable, null, false).
This method throws an IllegalArgumentException
if source
is null
.
Params: - source – the
Object
that originated the event - runnable – the
Runnable
whose run
method will be executed
Throws: - IllegalArgumentException – if
source
is null
See Also:
/**
* Constructs an <code>InvocationEvent</code> with the specified
* source which will execute the runnable's <code>run</code>
* method when dispatched.
* <p>This is a convenience constructor. An invocation of the form
* <tt>InvocationEvent(source, runnable)</tt>
* behaves in exactly the same way as the invocation of
* <tt>{@link #InvocationEvent(Object, Runnable, Object, boolean) InvocationEvent}(source, runnable, null, false)</tt>.
* <p> This method throws an <code>IllegalArgumentException</code>
* if <code>source</code> is <code>null</code>.
*
* @param source the <code>Object</code> that originated the event
* @param runnable the <code>Runnable</code> whose <code>run</code>
* method will be executed
* @throws IllegalArgumentException if <code>source</code> is null
*
* @see #InvocationEvent(Object, Runnable, Object, boolean)
*/
public InvocationEvent(Object source, Runnable runnable) {
this(source, runnable, null, false);
}
Constructs an InvocationEvent
with the specified
source which will execute the runnable's run
method when dispatched. If notifier is non-null
,
notifyAll()
will be called on it
immediately after run
returns.
An invocation of the form InvocationEvent(source,
runnable, notifier, catchThrowables)
behaves in exactly the same way as the invocation of
InvocationEvent
(source, InvocationEvent.INVOCATION_DEFAULT, runnable, notifier, catchThrowables).
This method throws an IllegalArgumentException
if source
is null
.
Params: - source – the
Object
that originated
the event - runnable – the
Runnable
whose
run
method will be
executed - notifier – the Object whose
notifyAll
method will be called after
Runnable.run
has returned - catchThrowables – specifies whether
dispatch
should catch Throwable when executing
the Runnable
's run
method, or should instead propagate those
Throwables to the EventDispatchThread's
dispatch loop
Throws: - IllegalArgumentException – if
source
is null
See Also:
/**
* Constructs an <code>InvocationEvent</code> with the specified
* source which will execute the runnable's <code>run</code>
* method when dispatched. If notifier is non-<code>null</code>,
* <code>notifyAll()</code> will be called on it
* immediately after <code>run</code> returns.
* <p>An invocation of the form <tt>InvocationEvent(source,
* runnable, notifier, catchThrowables)</tt>
* behaves in exactly the same way as the invocation of
* <tt>{@link #InvocationEvent(Object, int, Runnable, Object, boolean) InvocationEvent}(source, InvocationEvent.INVOCATION_DEFAULT, runnable, notifier, catchThrowables)</tt>.
* <p>This method throws an <code>IllegalArgumentException</code>
* if <code>source</code> is <code>null</code>.
*
* @param source the <code>Object</code> that originated
* the event
* @param runnable the <code>Runnable</code> whose
* <code>run</code> method will be
* executed
* @param notifier the Object whose <code>notifyAll</code>
* method will be called after
* <code>Runnable.run</code> has returned
* @param catchThrowables specifies whether <code>dispatch</code>
* should catch Throwable when executing
* the <code>Runnable</code>'s <code>run</code>
* method, or should instead propagate those
* Throwables to the EventDispatchThread's
* dispatch loop
* @throws IllegalArgumentException if <code>source</code> is null
*
* @see #InvocationEvent(Object, int, Runnable, Object, boolean)
*/
public InvocationEvent(Object source, Runnable runnable, Object notifier,
boolean catchThrowables) {
this(source, INVOCATION_DEFAULT, runnable, notifier, catchThrowables);
}
Constructs an InvocationEvent
with the specified
source and ID which will execute the runnable's run
method when dispatched. If notifier is non-null
,
notifyAll
will be called on it
immediately after run
returns.
Note that passing in an invalid id
results in
unspecified behavior. This method throws an
IllegalArgumentException
if source
is null
.
Params: - source – the
Object
that originated
the event - id – the ID for the event
- runnable – the
Runnable
whose
run
method will be executed - notifier – the
Object
whose notifyAll
method will be called after
Runnable.run
has returned - catchThrowables – specifies whether
dispatch
should catch Throwable when executing the
Runnable
's run
method, or should instead propagate those
Throwables to the EventDispatchThread's
dispatch loop
Throws: - IllegalArgumentException – if
source
is null
/**
* Constructs an <code>InvocationEvent</code> with the specified
* source and ID which will execute the runnable's <code>run</code>
* method when dispatched. If notifier is non-<code>null</code>,
* <code>notifyAll</code> will be called on it
* immediately after <code>run</code> returns.
* <p>Note that passing in an invalid <code>id</code> results in
* unspecified behavior. This method throws an
* <code>IllegalArgumentException</code> if <code>source</code>
* is <code>null</code>.
*
* @param source the <code>Object</code> that originated
* the event
* @param id the ID for the event
* @param runnable the <code>Runnable</code> whose
* <code>run</code> method will be executed
* @param notifier the <code>Object</code> whose <code>notifyAll</code>
* method will be called after
* <code>Runnable.run</code> has returned
* @param catchThrowables specifies whether <code>dispatch</code>
* should catch Throwable when executing the
* <code>Runnable</code>'s <code>run</code>
* method, or should instead propagate those
* Throwables to the EventDispatchThread's
* dispatch loop
* @throws IllegalArgumentException if <code>source</code> is null
*/
protected InvocationEvent(Object source, int id, Runnable runnable,
Object notifier, boolean catchThrowables) {
super(source, id);
this.runnable = runnable;
this.notifier = notifier;
this.catchExceptions = catchThrowables;
this.when = System.currentTimeMillis();
}
Executes the Runnable's run()
method and notifies the
notifier (if any) when run()
returns.
/**
* Executes the Runnable's <code>run()</code> method and notifies the
* notifier (if any) when <code>run()</code> returns.
*/
public void dispatch() {
if (catchExceptions) {
try {
runnable.run();
}
catch (Throwable t) {
if (t instanceof Exception) {
exception = (Exception) t;
}
throwable = t;
}
}
else {
runnable.run();
}
if (notifier != null) {
synchronized (notifier) {
notifier.notifyAll();
}
}
}
Returns any Exception caught while executing the Runnable's run()
method.
Returns: A reference to the Exception if one was thrown; null if no
Exception was thrown or if this InvocationEvent does not
catch exceptions
/**
* Returns any Exception caught while executing the Runnable's <code>run()
* </code> method.
*
* @return A reference to the Exception if one was thrown; null if no
* Exception was thrown or if this InvocationEvent does not
* catch exceptions
*/
public Exception getException() {
return (catchExceptions) ? exception : null;
}
Returns any Throwable caught while executing the Runnable's run()
method.
Returns: A reference to the Throwable if one was thrown; null if no
Throwable was thrown or if this InvocationEvent does not
catch Throwables Since: 1.5
/**
* Returns any Throwable caught while executing the Runnable's <code>run()
* </code> method.
*
* @return A reference to the Throwable if one was thrown; null if no
* Throwable was thrown or if this InvocationEvent does not
* catch Throwables
* @since 1.5
*/
public Throwable getThrowable() {
return (catchExceptions) ? throwable : null;
}
Returns the timestamp of when this event occurred.
Returns: this event's timestamp Since: 1.4
/**
* Returns the timestamp of when this event occurred.
*
* @return this event's timestamp
* @since 1.4
*/
public long getWhen() {
return when;
}
Returns a parameter string identifying this event.
This method is useful for event-logging and for debugging.
Returns: A string identifying the event and its attributes
/**
* Returns a parameter string identifying this event.
* This method is useful for event-logging and for debugging.
*
* @return A string identifying the event and its attributes
*/
public String paramString() {
String typeStr;
switch(id) {
case INVOCATION_DEFAULT:
typeStr = "INVOCATION_DEFAULT";
break;
default:
typeStr = "unknown type";
}
return typeStr + ",runnable=" + runnable + ",notifier=" + notifier +
",catchExceptions=" + catchExceptions + ",when=" + when;
}
}