Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Aplicació

Aquesta és una aplicació JavaFX completa: una finestra amb un text a dins.

public class HelloApp extends Application {

    @Override
    public void start(Stage primaryStage) {
        Label label = new Label("Hello World!");
        Scene scene = new Scene(label, 400, 200);

        primaryStage.setTitle("Hello world App");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

Hi són les tres peces de què parlàvem: el Stage és la finestra, la Scene el contenidor del graf, i el Label és, en aquest cas, tot el graf.

Què passa quan s’engega

El main() només crida launch(), i a partir d’aquí mana JavaFX. El mètode launch() engega el sistema gràfic, crea el JavaFX Application Thread, instancia la teva classe i li crida els mètodes del cicle de vida:

MètodeQuan es cridaOn s’executa
init()Un cop, abans de la interfícieAl fil que ha cridat launch()
start(Stage)Un cop, amb la finestra principal ja creadaAl JavaFX Application Thread
stop()En tancar l’última finestra o cridar Platform.exit()Al JavaFX Application Thread

Només start() és obligatori. Els altres dos es redefineixen quan cal:

@Override
public void init() {
    // preparar dades o carregar configuració, encara sense interfície
}

@Override
public void stop() {
    // tancar connexions, desar l'estat
}

A init() no es pot tocar la interfície, perquè encara no existeix i perquè no s’executa al fil de JavaFX. Tot el que construeixi nodes va a start().

launch() és bloquejant: no retorna fins que l’aplicació acaba. Per això no hi ha res després de la seva crida al main().

El main que no cal

Amb la configuració de Maven que hem vist, el plugin ja sap quina és la classe principal i el main() no és estrictament necessari. Es continua escrivint per dos motius: perquè molts IDE l’esperen per oferir el botó d’executar, i perquè permet passar arguments.

Els arguments es recuperen des de dins de l’aplicació amb getParameters():

List<String> args = getParameters().getRaw();

Tancar l’aplicació

Per defecte, l’aplicació acaba quan es tanca l’última finestra. Es pot forçar amb Platform.exit(), que crida stop() i allibera el sistema gràfic. Convé evitar System.exit(), que talla el procés sense passar per stop().

Referències

Last change: , commit: 0ee48c2