Я пытаюсь создать приложение с использованием JavaFX. Но приложение JavaFX не является основным входом приложения.JavaFX Object всегда null после запуска
Я использую Main
-класс, а Controller
-класса (который контролирующее все), а также другие классы подобно JavaFX Application
Main -(calls)-> Controller -(creates)-> JavaFX Application
После создания JavaFX Application
объекта, то Controller
вызывает метод, так JavaFX Application
Объект имеет экземпляр Controller
Но этот объект всегда имеет значение null, как только я выхожу за вызов метода.
Main
public class Main{
public static void main(String[] args){
Controller c = new Controller();
}
}
Controller
public class Controller{
private MyApplication app;
public Controller(){
app = new MyApplication(); //create Application
app.setController(this); //set Controller Object
app.startApplication(); //launch the application
}
}
MyApplication
public class MyApplication extends Application {
private Stage primaryStage;
private BorderPane rootLayout;
private Controller controller;
@Override
public void start(Stage primaryStage) {
this.primaryStage = primaryStage;
initRootLayout();
}
public void setController(Controller con){
this.controller = con;
}
public void startApplication(String... args){
launch(args);
}
public void initRootLayout(){
System.out.println(controller==null); //returns true. But why?
try{
FXMLLoader loader = new FXMLLoader();
loader.setLocation(MyApplication.class.getResource("view/RootLayout.fxml"));
rootLayout = (BorderPane) loader.load();
Scene scene = new Scene(rootLayout);
primaryStage.setScene(scene);
primaryStage.show();
}
catch(IOException e){
e.printStackTrace();
}
}
}
Как пришел, Controller
Instance в MyApplication
всегда нуль. Единственный раз, когда он не равен нулю, находится в пределах звонка setController
Вы можете попытаться напечатать («1» + это) в методе setController и («2» + this) в методе initRootLayout, потому что есть только 3 варианта, что он равен нулю: 1. setter called later, 2 он где-то снова задает нуль, 3. вы работаете в другом объекте MyApplication. проверьте, является ли выходной объект одинаковым, а первый - до второго. – EyeSpy
Предположим, что запуск (args) создает новый MyApplication – EyeSpy
@ EyeSpy. Это правильно. В приложении JavaFX подкласс 'Application' является точкой входа в приложение (эквивалент класса с методом' main' в «традиционном» Java-приложении). Таким образом, этот тип самонастраивания не поддерживается. –