我按以下方式加载FXML文件
FXMLLoader loader = new FXMLLoader(getClass().getResource("register.fxml"));
Controller c = new Controller("Welcome to EAST");
loader.setController(c);
Scene scene = new Scene(loader.load());
fx.setScene(scene); // fx is a JFXPanel which is used to integrate FX in Swing
上面的代码运行正常,现在我想在Controller类的构造函数中访问textFields
的{{1}}的默认值,但是它给出了错误:线程中的异常" JavaFX应用程序线程"显示java.lang.NullPointerException 即可。
注意:我已经为textFields分配了一些默认值,这就是我想要访问它们的原因。
以下是我的控制器类
Controller.java
register.fxml
任何建议都将不胜感激。谢谢:))
答案 0 :(得分:4)
你不是。在FXMLLoader注入控件之前,必须创建控制器实例。您可以使用initialize方法而不是控制器中的构造函数。
让您的控制器实施https://docs.oracle.com/javafx/2/api/javafx/fxml/Initializable.html。
或实施
class MyController {
@FXML
public void initialize(){
//Will be called by FXMLLoader
}
}
答案 1 :(得分:0)
FXMLLoader将开始在loader.load()中加载和初始化FX组件。在那一刻它需要控制器来进行事件处理。因此,如果您创建Controller(构造函数),则FXML无法使用。
只有在从FXML调用的事件方法中,您才能访问GUI组件。或者向控制器添加单独的方法,如
public void init() { ... }
在加载后调用...访问组件。