javafx中的注入失败(NullPointerException)

javafx中的注入失败(NullPointerException),java,javafx,fxml,Java,Javafx,Fxml,fxml中的对象不注入控制器,它在运行时抛出NullPointerException。我已经检查了fxml文件和java控制器类中的ID 我已经在FXML中完成了这项工作: <?xml version = "1.0" encoding = "UTF-8"?> <?import java.net.*?> <?import javafx.scene.layout.HBox?> <?import javafx.scene.control.Button?>

fxml中的对象不注入控制器,它在运行时抛出NullPointerException。我已经检查了fxml文件和java控制器类中的ID

我已经在FXML中完成了这项工作:

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

<?import java.net.*?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.ComboBox?>
<?import javafx.geometry.Insets?>

<HBox spacing  = "10" alignment = "center" xmlns:fx = "http://javafx.com/fxml" fx:controller = "MainLayout">
    <padding>
        <Insets top = "10" right = "10" bottom = "10" left = "10"/>
    </padding>
    <children>
        <Button fx:id = "dataButton" text = "Element" onAction = "#clicked"/>
        <ComboBox fx:id = "elementsCombo"/>
    </children>
</HBox>

您缺少
@FXML
注释。请看,您的FXML和控制器之间似乎存在错误的关系:控制器中有一个加载FXML的方法,它将创建控制器的新实例。。。。我不确定这是你想要的。我添加了@FXML注释,现在它可以正常工作了。
import javafx.scene.layout.BorderPane;
import javafx.fxml.FXMLLoader;
import javafx.fxml.FXML;
import javafx.scene.layout.HBox;
import java.io.IOException;
import javafx.scene.control.ComboBox;
import javafx.scene.control.Button;
import javafx.event.ActionEvent;

public class MainLayout extends BorderPane
{
    HBox  NavigationBar;
    Button dataButton;
    int counter = 0;

    public void setLayout()
    {
        try
        {
                NavigationBar = FXMLLoader.load(getClass().getClassLoader().getResource("navbar.fxml"));
        }
        catch(IOException ex)
        {
            ex.printStackTrace();
        }

        setTop(NavigationBar);
    }

    public void clicked(ActionEvent e)
    {
        counter++;
        dataButton.setText(counter + " clicks");
    }
}