Is there an elegant way to fire an event when characters are available from
You would have to create a separate thread that blocks in read until something is available.
If you don't want to actually eat up the input, you would have to wrap it with an internal buffer, read into the buffer, shout, and when asked for the input, give back data from the buffer.
You could solve it like this:
InputStream stdin = System.in; // Create a wrapper (with it's own dedicated read-thread) MyListenableInputStream listenableInputStream = new MyListenableInputStream(stdin); // Update System.in with something more useful. System.setIn(listenableInputStream);