The most likely reason is that there's still a thread that is running in the background.
In Java, all GUI applications have at least two threads - the application itself and the GUI. In Swing, for example, you must specify the EXIT_ON_CLOSE flag for your top-level frame, otherwise the GUI will close but the application will still be running in the background.
If this is a desktop application, make sure you call Platform.exit() in whatever exit method you have.
That's just a restriction on inner class binding to local variables (just ask if you want he full explanation). Simply make your timer variable an ordinary instance variable and the inner class will be abse to use it.