java - 尝试在 Text 对象上使用 .setText 时出现 NullPointerException

标签 java javafx nullpointerexception fxml

每当我尝试在 Controller 类的 Text 字段上使用 .setText 时,都会收到 NullPointerException。 这是我的 Controller 类:

public class ViewTripController{

    private static File open;

    private static Trip trip; 

    @FXML
    static Text budget;

    @FXML
    static Text spent;


    @FXML
    void toEditTrip(){
        VistaNavigator.loadVista(VistaNavigator.EDIT_TRIP);
    }

    @FXML
    void toAddExpense(){
        VistaNavigator.loadVista(VistaNavigator.EDIT_TRIP);
    }

    public static void setTrip(Trip trip2){
        trip = trip2;
    }


    public static void budgetText(String text){
        budget.setText(text);
    }

    public static void spentText(String text){
        spent.setText(text);
    }

    public static void setFile(File file){
        open = file;
    }
}

这是我的 FXML 文件:

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

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

<StackPane id="AnchorPane" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="javafx.ViewTripController">
   <children>
      <Pane prefHeight="400.0" prefWidth="600.0">
         <children>
            <Text layoutX="68.0" layoutY="87.0" strokeType="OUTSIDE" strokeWidth="0.0" text="Total Budget: " />
            <Text layoutX="68.0" layoutY="136.0" strokeType="OUTSIDE" strokeWidth="0.0" text="Total Spent: " />
            <Button layoutX="109.0" layoutY="301.0" mnemonicParsing="false" onAction="#toEditTrip" text="Add Expense..." />
            <Button layoutX="373.0" layoutY="301.0" mnemonicParsing="false" text="View Expense List" />
            <Text fx:id="budget" layoutX="139.0" layoutY="87.0" strokeType="OUTSIDE" strokeWidth="0.0" text="Text" />
            <Text fx:id="spent" layoutX="133.0" layoutY="136.0" strokeType="OUTSIDE" strokeWidth="0.0" text="Text" />
         </children></Pane>
   </children>
</StackPane>

当我查看其他帖子时,他们告诉我检查 FXML 对象中的 fx:id。我已经这样做了,并且 fx:id 都是正确的。为什么我会在这里收到 NullPointerException?

最佳答案

FXMLLoader 不将静态字段视为有效的注入(inject)目标。因此,这些字段必须是非静态的。如果您需要以静态方式访问它们(您应该避免这种情况),您仍然可以将这些值复制到 initialize 方法中的静态字段。

您可以在此处找到使用静态字段传递信息的替代方法:Passing Parameters JavaFX FXML

关于java - 尝试在 Text 对象上使用 .setText 时出现 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36052221/

相关文章:

java - 为什么我在 .setOnTouchListener() 上遇到 nullpointerException?

java - SimpleCursorAdapter 抛出 NullPointerException

Java 构造函数和空指针异常

java - java中的电子邮件验证

java - 使用扫描仪 Java 在没有固定输入的情况下查找序列中的连续数字

java - 查找数组中的差异

JavaFX CSS 折线图

java - java 帮助中的命令行参数

java - 尽快从 PGM 或 TIFF 创建 JavaFX 图像

java - 将 Button 添加到 TableView 并将 Button 的 textProperty 绑定(bind)到 TableView 对象的属性