javafx中的注入失败(NullPointerException)
fxml中的对象不注入控制器,它在运行时抛出NullPointerException。我已经检查了fxml文件和java控制器类中的ID 我已经在FXML中完成了这项工作: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?>
<?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");
}
}