将对象从主类传递给JavaFX Application

时间:2014-07-10 13:36:57

标签: java javafx

我有简单的主类。 我尝试将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();

    }

}

窗口主类。在那里,我尝试调用test() user函数(实际上,我需要传递给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(); }

}

当我尝试全部运行时:

Exception in Application start method

当然(也许:))因为windowLogin中的usernull

我做错了什么?如何将user传递给windowLogin? (我不会使用Singletone)


更新

我需要在start()方法中使用user,如前所述 - 我需要将user传递给WindowMainController

1 个答案:

答案 0 :(得分:1)

<强>概述

你在这里面临的问题是调用launch(),Javafx线程创建了一个WindowLogin的新对象。因此,您为WindowLogin创建并为其分配用户的对象不再在start方法中使用!

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

您可以通过将WindowLogin中的User声明为静态来解决此问题!

public static User user;

这将有助于保持用户的实例