我有简单的主类。
我尝试将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中的user
是null
。
我做错了什么?如何将user
传递给windowLogin
? (我不会使用Singletone)
更新
我需要在start()方法中使用user
,如前所述 - 我需要将user
传递给WindowMainController
答案 0 :(得分:1)
<强>概述强>
你在这里面临的问题是调用launch(),Javafx线程创建了一个WindowLogin
的新对象。因此,您为WindowLogin
创建并为其分配用户的对象不再在start方法中使用!
WindowLogin windowLogin = new WindowLogin();
windowLogin.user = user;
您可以通过将WindowLogin中的User
声明为静态来解决此问题!
public static User user;
这将有助于保持用户的实例