JavaFX Application Lifecycle
Use this skill when the application already exists or the question is specifically about
Application.init(), start(Stage), stop(), or primary-stage ownership rather than initial
scaffolding.
Example
package com.example.app;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.stage.Stage;
public class MainApp extends Application {
private ExecutorService executor;
@Override
public void init() {
executor = Executors.newSingleThreadExecutor();
}
@Override
public void start(Stage stage) {
stage.setTitle("Lifecycle Demo");
stage.setScene(new Scene(new Label("Ready"), 320, 160));
stage.show();
}
@Override
public void stop() {
executor.shutdownNow();
}
}
Setup notes
- Keep
init()for non-UI initialization; no scene graph access belongs there. - Treat the primary
Stageas application-level infrastructure and pass navigation decisions through a shell or coordinator instead of random controllers. - Close executors, subscriptions, file watchers, and native resources explicitly in
stop().
Gotchas
- The
Stageis only available instart(Stage), not ininit(). - UI changes must run on the JavaFX Application Thread.
javafx-project-starteris the right skill for generating a new app skeleton; this skill is for lifecycle semantics and ownership boundaries inside an app.