java在给出fx:id之后,我在控制器中得到了一个空指针,但错误仍然存在
我有一个fxml表示,其中我的fx:id被定义为ContentPane
<center>
<Pane fx:id="ContentPane" prefHeight="200.0" prefWidth="200.0" BorderPane.alignment="CENTER" />
</center>
而在主应用程序中,我
public class Home_pageController extends Application {
@FXML
private Pane ContentPane;
/**
* Initializes the controller class.
*/
/**
* Initializes the controller class.
*/
@Override
public void start(Stage stage) throws Exception {
Parent root = FXMLLoader.load(getClass().getResource("home_page.fxml"));
Scene scene = new Scene(root);
stage.setTitle("Some scene");
stage.setScene(scene);
stage.show();
MyGrid();
}
public static void main(String[] args) {
launch(args);
}
public void MyGrid() throws IOException {
GridPane root = new GridPane();
Label test = new Label("Test");
root.add(test,0,0);
ContentPane.getChildren().clear();
ContentPane.getChildren().add(root);
}
}
我确实得到了下面的错误
java.lang.NullPointerException
at controllers.Home_pageController.MyGrid(Home_pageController.java:70)
at controllers.Home_pageController.start(Home_pageController.java:62)
at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$162(LauncherImpl.java:863)
at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$175(PlatformImpl.java:326)
at com.sun.javafx.application.PlatformImpl.lambda$null$173(PlatformImpl.java:295)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.application.PlatformImpl.lambda$runLater$174(PlatformImpl.java:294)
at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.lambda$null$148(WinApplication.java:191)
at java.lang.Thread.run(Thread.java:745)
# 1 楼答案
如果在fxml中指定了
fx:controller
属性,则FXMLLoader
使用指定为属性值的类的构造函数来构造控制器的新实例控制器的现有实例不会自动重用
这就是为什么启动的应用程序实例的
ContentPane
字段从未被修改,而是保持null