Passer l'objet de la classe principale à l'application JavaFX


J'ai une classe principale simple. Là, j'essaie de passer user à WindowLogin:

package client;


public class Client{

    public User user;

    public static void main(String[] args) {

        try {
            Client client = new Client();
            client.run(args);
        } catch (Exception e) {
            System.out.println("[ERR] Fatal error");
        }

    }

    public void run(String[] args)
    {

        user = new User();

        WindowLogin windowLogin = new WindowLogin();
        windowLogin.user = user;
        windowLogin.show();

    }

}

Classe principale de la fenêtre. Là, j'essaie d'appeler test() fonction de user (en vrai, j'ai besoin de passer à WindowMainController):

package client;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.scene.Parent;

import java.io.IOException;

public class WindowLogin extends Application{

    private Stage stage;
    public User user;

    @Override
    public void start(Stage primaryStage) throws Exception {
        stage = new Stage();
        try {
            FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("views/WindowLogin.fxml"));

            WindowLoginController controller =
                    fxmlLoader.<WindowLoginController>getController();

            user.test();

            Parent root = fxmlLoader.load();
            Scene scene = new Scene(root);
            stage.setScene(scene);
            stage.show();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public void show(){
        launch();
    }
    public void hide() { stage.hide(); }

}

Quand j'essaie de tout exécuter:

Exception in Application start method

Bien sûr (peut-être :) ) à cause de user dans windowLogin est null.

Qu'est-ce que je fais mal? Comment passer user à windowLogin? (je n'utiliserai pas Singletone)


Mise à jour:

J'ai besoin d'utiliser user dans la méthode start (), car je dit avant - j'ai besoin de passer user à WindowMainController

Author: Виктор Новиков, 2014-07-10

1 answers

Vue d'ensemble

Le problème auquel vous êtes confronté ici est en appelant launch(), Javafx thread crée un nouvel objet de WindowLogin. Ainsi, l'objet que vous avez créé pour WindowLogin et qui lui a été attribué n'est plus utilisé dans la méthode start !

 WindowLogin windowLogin = new WindowLogin();
 windowLogin.user = user;

Vous pouvez surmonter cela en déclarant le User dans WindowLogin comme statique !

public static User user;

Cela aidera à garder juste sur l'instance de l'Utilisateur

 1
Author: ItachiUchiha, 2014-07-10 14:28:53