当前位置: 首页 > 知识库问答 >
问题:

JavaFX,标签空指针异常

颛孙国源
2023-03-14

我正在编写的一个程序出现了以下问题,我在互联网上搜索了一下,但我真的找不到任何东西来帮助我理解以下问题

因此,在另一个类中,我编写了一个方法,只要单击搜索按钮,该方法就执行如下所示:

public void searchButton(){
        try {
            new SearchController().display();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

然后SearchController类看起来如下所示(我在这里简化了它):

public class SearchController {

    @FXML
    private Button cancelButton;

    @FXML
    private Label what;

    private static Stage stage;

    private static BorderPane borderPane;

    @FXML
    public void initialize(){
        what.setText("Testing"); // this woks
        cancelButton.setOnAction(e -> stage.close());
    }

    public void display() throws IOException {

        stage = new Stage();
        stage.setResizable(false);
        stage.setTitle("Product search");
        stage.initModality(Modality.APPLICATION_MODAL);
        FXMLLoader loader = new FXMLLoader();
        loader.setLocation(SearchController.class.getResource("Search.fxml"));
        borderPane = loader.load();
        Scene scene = new Scene(borderPane);
        stage.setScene(scene);
        //what.setText("Testing") and this doesn't work
        stage.showAndWait();

    }



}

有人能告诉我为什么可以在initialize方法上写文本吗(该方法在borderpane=loader.load()之后调用;行...那么,如果我尝试在该行之后的标签上写,为什么它不起作用?)

提前谢谢你

共有1个答案

景俊良
2023-03-14

fxmlloader创建在FXML根元素的fx:controller属性中指定的类的实例。然后,当fx:id属性与字段名匹配时,它将FXML文件中定义的元素注入到它创建的控制器实例中。然后调用该实例的initialize()方法。

使用new SearchController()“手工”创建控制器实例。这与FXMLLoader创建的对象不同。现在,当您加载fxml文件时,您就有了SearchController的两个不同实例。因此,如果从display()方法调用what.settext(...),则不是在由FXMLLoader创建的控制器实例上调用它。因此,在调用What.settext(...)的实例中,What尚未初始化,并且会出现空指针异常。

由于initialize()是由fxmlloader在它创建的实例上调用的,所以当您从initialize()方法调用what.settext(...)时,您是在由fxmlloader创建的实例上调用它,因此该实例的FXML注入字段已经初始化。

 类似资料:
  • 问题内容: 有可能这可能是一个双重问题。我将String变量初始化为null。我可能会或可能不会使用一个值更新它。现在我想检查此变量是否不等于null以及我尝试执行的操作是否会得到null指针异常。空指针异常,因为它代价高昂。是否有任何有效的解决方法.TIA 问题答案: 如果您使用 你 不会 得到。 我怀疑你在做什么: 这是因为null 而引发,而不是因为null。 如果仍然无法解释,请发布您用于

  • 我已经更新了我的项目中的一些依赖关系之后,我的Hibernate配置类显示Nullpointerx的。 我将SpringDataJPA存储库与hibernate一起使用,已经超过24小时了,仍然没有找到任何关于小问题的适当解决方案。 我已经尝试过的一些解决方案:- 使用@bean(name=“entityManagerFactory”)提供bean名称 我面临的问题 波姆。xml文件 配置类 db

  • 当我试图从DB查询结果时,我得到一个空指针异常。以下是错误: 这是错误产生的函数。 如果我启动应用程序信息服务(=new ApplicationInfoService()),我会得到一个指向我的服务类的空指针错误,在这里进行查询 错误转到createQuery行,如果我打印出EntityManager,它将返回“null”。为什么我的Entitymanager不能初始化。我在我的登录系统中使用了几

  • 我试图通过参考YT的一些教程来创建一个表视图。当我做一个简单的表视图及其相关的控制器时,它工作。 主类: TestTableView2.fxml:

  • 问题内容: 嗨,我们一直在使用apache编写我们的Java程序来读取xls和xlsx文件,问题是我们由于两个原因而得到了空指针异常。第一个是已经解决的空白单元格,另一个是当我们选择一个没有任何记录的列。 我们的程序要求输入excel文件的路径,然后输入要读取的文件的特定工作表号和特定的工作表的列号。这是读取xls文件的代码 变量工作表名称用于excel文件的工作表编号 变量cols用于您要阅读的

  • 问题内容: 我正在android中做一个应用程序,因此我需要访问com.android.internal.telephony API。现在,我可以访问这些API了,但问题是,无论我在自己的类中调用Class Call.java方法的什么地方,都会抛出。您可以在http://hi- android.info/src/com/android/internal/telephony/Call.java.h