有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    如果在fxml中指定了fx:controller属性,则FXMLLoader使用指定为属性值的类的构造函数来构造控制器的新实例

    控制器的现有实例不会自动重用

    这就是为什么启动的应用程序实例的ContentPane字段从未被修改,而是保持null