JavaFX:java.lang.NullPointerException 尝试调整边框窗格大小时

JavaFX: java.lang.NullPointerException while trying to resize borderpane

大家晚上好,

我仍处于 Java 编程的初级阶段。我当前的目标是在启动初始化期间调整 BorderPane 顶部的大小。当然,拥有一个包含静态常量(如大小值)的单独 class 将非常有益。

不幸的是,我总是遇到 NullPointerException。我想这是我看不到的非常简单的事情。我希望你能帮助我。

提前致谢!

package main;

import javafx.application.Application;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.Pane;
import javafx.scene.layout.Region;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;


public class Main extends Application {

@FXML
Pane main_top;

@Override
public void start(Stage primaryStage) {
    try {
        BorderPane root = (BorderPane)FXMLLoader.load(getClass().getResource("MainGui.fxml"));
        Scene scene = new Scene(root,400,400);
        scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
        primaryStage.setScene(scene);
        primaryStage.show();
        primaryStage.setMaximized(true);
        BorderPane.layoutInArea(main_top, 0, 0, 200, GlobalProperties.MainGuiTopPaneHeight, 0, null, false, false, null, null, false);
    } catch(Exception e) {
        e.printStackTrace();
    }

}

编辑:

java.lang.NullPointerException
at javafx.scene.layout.Region.layoutInArea(Unknown Source)
at main.Main.start(Main.java:27)
at com.sun.javafx.application.LauncherImpl.lambda$launchApplication13(Unknown Source)
at com.sun.javafx.application.LauncherImpl$$Lambda/2117598489.run(Unknown Source)
at com.sun.javafx.application.PlatformImpl.lambda$runAndWait6(Unknown Source)
at com.sun.javafx.application.PlatformImpl$$Lambda/1051754451.run(Unknown Source)
at com.sun.javafx.application.PlatformImpl.lambda$null4(Unknown Source)
at com.sun.javafx.application.PlatformImpl$$Lambda/1401292544.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.application.PlatformImpl.lambda$runLater5(Unknown Source)
at com.sun.javafx.application.PlatformImpl$$Lambda/1775282465.run(Unknown Source)
at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(Unknown Source)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.lambda$null1(Unknown Source)
at com.sun.glass.ui.win.WinApplication$$Lambda/1109371569.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)

EDIT2 (MainGui.fxml):

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.*?>
<?import java.lang.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.layout.BorderPane?>

<BorderPane xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="main.MainGuiController">
   <top>
      <Pane fx:id="main_top" prefHeight="200.0" prefWidth="200.0" style="-fx-background-color: #525260;" BorderPane.alignment="CENTER" />
   </top>
   <left>
      <Pane fx:id="main_left" prefHeight="200.0" prefWidth="200.0" style="-fx-background-color: #525252;" BorderPane.alignment="CENTER" />
   </left>
   <center>
      <Pane fx:id="main_center" prefHeight="200.0" prefWidth="200.0" BorderPane.alignment="CENTER" />
   </center>
   <right>
      <Pane fx:id="main_right" prefHeight="200.0" prefWidth="200.0" style="-fx-background-color: #525252;" BorderPane.alignment="CENTER" />
   </right>
   <bottom>
      <Pane fx:id="main_bottom" prefHeight="200.0" prefWidth="200.0" style="-fx-background-color: #525260;" BorderPane.alignment="CENTER" />
   </bottom>
</BorderPane>

经过几天的反复试验,我终于找到了解决办法。现在,在它解决之后看起来很简单 ;-)

我只需要在控制器中添加控制器初始化接口即可。

package main;

import java.net.URL;
import java.util.ResourceBundle;

import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Button;
import javafx.scene.layout.Pane;


public class MainGuiController implements Initializable{

//***** @author n3wton

//**** FXML declarations for MainGui.fxml
@FXML
private Pane main_top;
@FXML
private Button button1;

//***** Beginning of auto-initialized method 
@Override
public void initialize(URL arg0, ResourceBundle arg1) {

    button1.setPrefSize(1, 1);
    main_top.setPrefSize(50, 10);

    }
}