I've worked with some rather nice FRP-like systems in Haskell. I doubt you could make this work in Java without losing your mind?