【问题标题】:NullPointerException when trying to pass an Object through "this"尝试通过“this”传递对象时出现 NullPointerException
【发布时间】:2015-05-18 14:46:53
【问题描述】:

我在 JavaFX 中做这个教程,在“

public class MainApp extends Application{

    private Stage primaryStage;
    private BorderPane rootLayout;
    private ObservableList<Person> personData = FXCollections.observableArrayList();


    public MainApp() {
        personData.add(new Person("Stefan", "Meier"));
        personData.add(new Person("Martin", "Mueller"));
    }

    @Override
    public void start(Stage primaryStage) throws Exception {
        this.primaryStage = primaryStage;
        this.primaryStage.setTitle("AddressApp");
        try {
            FXMLLoader loader = new FXMLLoader(ClassLoader.getSystemResource("sample.fxml"));
            rootLayout = (BorderPane) loader.load();
            Scene scene = new Scene(rootLayout);
            primaryStage.setScene(scene);
            primaryStage.show();
        } catch (IOException iox){
            iox.printStackTrace();
        }

        showPersonOverview();
    }

    public Stage getPrimaryStage() {
        return primaryStage;
    }

    public void showPersonOverview() {
        try {
            FXMLLoader loader = new FXMLLoader(ClassLoader.getSystemResource("fxcontroller.fxml"));
            AnchorPane overviewPage = (AnchorPane) loader.load();
            rootLayout.setCenter(overviewPage);

            // Give the controller access to the main app
            Controller controller = loader.getController();
            controller.setMainApp(this); // <<--NullPointerException

        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public ObservableList<Person> getPersonData(){
      return personData;
    }

    public static void main(String[] args) {
        launch(args);
    }
}

类控制器中的方法 setMainApp()。此类中的其他代码是正确的,我确信大多数代码只是设置并获取或创建按钮和标签。

@FXML
private TableView<Person> personTable;

private MainApp mainApp;

public void setMainApp(MainApp mainApp) {
    this.mainApp = mainApp;

    personTable.setItems(mainApp.getPersonData());
}

这是提供 AnchorPane 的 fxcontroller.fxml 文件的第一部分

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

//import statements

<AnchorPane prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="sample.Controller">
   .....

错误信息:

应用程序启动方法中的异常 java.lang.reflect.InvocationTargetException …… 引起:**java.lang.NullPointerException** ……

抱歉,描述太长了。我希望我知道如何让它更短。

【问题讨论】:

  • 您的 controller 变量可能为空。这会导致您看到的 NPE。
  • @forgivenson 是正确的。您可以发布(至少是根元素)fxcontroller.fxml 文件吗?
  • MainApp.java:69 在这里检查您的对象是否为空
  • 我怀疑控制器变量为空,但我一直试图弄清楚为什么 'loader.getController()' 没有返回任何东西。可能是系统故障?以前错误出现在该行。
  • 可能fxml文件中没有“personTable”?必须有一个

标签: java nullpointerexception javafx this


【解决方案1】:

您的控制器无法加载。这就是你得到 nullpointerexception 的原因。

  1. 可能是控制器路径错误
  2. 或者你在 fxml 文件中指定控制器时出错了

【讨论】:

    猜你喜欢
    • 2013-02-18
    • 2015-10-06
    • 1970-01-01
    • 2017-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-10
    相关资源
    最近更新 更多