4 Years
Discussion Span
Last Post by JamesCherrill

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.


If I use primaryStage.setOnCloseRequest() then I can't close my java.util.Timer.

The error it gives is "Cannot refer to a non-final variable timer inside an inner class defined in a different method"

Code is as follows:

        java.util.Timer timer = new java.util.Timer();

        primaryStage.setOnCloseRequest(new EventHandler<WindowEvent>()

            public void handle(WindowEvent event)

Also, Platform.exit() doesn't didn't work.

Edited by Doogledude123


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.


One that's declared in the class, but not inside the definition of any method or constructor, and isn't static.

This question has already been answered. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.