Simple, type-safe event dispatching for Java a la as3-signals
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
lib Even more standard header! Jul 27, 2011
src Even more standard header! Jul 28, 2011
.gitignore Add .gitignore Apr 3, 2011
LICENSE Update README to reflect 0.3 release to Maven Central. May 8, 2013
bootstrap.xml Initial Apr 3, 2011
build.xml Build and deploy Javadocs. Oct 13, 2011
pom.xml [maven-release-plugin] prepare for next development iteration May 8, 2013

This is a Java reinterpretation of Robert Penner's as3-signals. It keeps the simple event declaration and dispatching, while adding a dash of type-safety afforded by Java's generics.


Using a signal is a 3 step process. First, create a signal on the class that will be firing events:

public class Dispatcher {
    /** Dispatches the old value and the new value after it changes. */
    public final Signal2<String, String> onChanged = Signals.newSignal2();

Then, add listeners to that signal as appropriate:

public class InterestedParty {
    public void connectToDispatcher (Dispatcher d)
        d.onChanged.add(new Listener1<String>() {
            public void apply (String oldValue) {
                System.out.println("Dispatcher changed from " + oldValue);


d.onChanged.add(new Listener0() {
    public void apply () {
        System.out.println("I'll only be called for one dispatch!");

if the listener only wants to receive the next dispatch.

Finally, dispatch that signal when the event occurs:

onChanged.dispatch("oldValue", "newValue");

That'll call apply on all the added listeners.

If a listener is no longer interested in a signal, it can be removed from the signal, or Connection.disconnect can be called.

Connecting, disconnecting, and dispatching is thread-safe. After Signal.disconnect(Listener) or Connection.disconnect returns, a listener is guaranteed to never receive another call to its apply method.


The 0.3 release of signals is available via Maven Central. Just add this to your POM:


You can also download it directly from Maven Central.