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

时间:2016-03-17 05:19:24

标签: java javafx nullpointerexception fxml

每当我尝试在控制器类的Text字段中使用.setText时,我都会得到一个NullPointerException。 这是我的控制器类:

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?

1 个答案:

答案 0 :(得分:2)

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

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