**已关闭。**此问题需要debugging details。当前不接受答案。
编辑问题以包括desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem。这将有助于其他人回答问题。
昨天关门了。
Improve this question
我正在使用JavaFX和FXML构建一个桌面应用程序。我有一个FXML文件和一个对应的控制器类。但是,当我试图引用控制器类中的任何FXML元素时,它们都是null。
下面是我的代码的简化版本:
FXML文件(sample.fxml):
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.layout.AnchorPane?>
<AnchorPane fx:id="root" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/16" xmlns:fx="http://javafx.com/fxml/1" fx:controller="sample.Controller">
<Button fx:id="myButton" layoutX="263.0" layoutY="184.0" onAction="#handleButtonAction" text="Click me!" />
</AnchorPane>
控制器类(Controller.java):
package sample;
import javafx.fxml.FXML;
import javafx.scene.control.Button;
import javafx.scene.layout.AnchorPane;
public class Controller {
@FXML
private AnchorPane root;
@FXML
private Button myButton;
public void handleButtonAction() {
System.out.println("Button clicked");
}
public void initialize() {
System.out.println("Root: " + root);
System.out.println("Button: " + myButton);
}
}
在我的控制器类的initialize()方法中,root和myButton都是null,尽管它们已经在FXML文件中定义了。
我尝试了在网上找到的各种解决方案,例如确保FXML文件和控制器类具有正确的包名称,但没有一个有效。
1条答案
按热度按时间ajsxfq5m1#
问题是JavaFX FXML控制器类与FXML文件没有正确关联。因此,控制器类中所有对对象的引用都为null,即使它们已经初始化。
为了解决这个问题,通过编写代码loader.setController(this)在类中指定了控制器类;
不要在FXML文件中指定控制器名称,因为FXMLLoader将创建另一个示例并使用它来代替主示例。