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
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