JavaFX控制器加载

JavaFX控制器加载,java,javafx,javafx-8,fxml,fxmlloader,Java,Javafx,Javafx 8,Fxml,Fxmlloader,每次我忘记这个把戏的时候,我都会遇到几次非常奇怪的行为 FXMLLoader loader = new FXMLLoader(); loader.setLocation(getClass().getResource("view/window.fxml")); Parent root = loader.load(); GuiController controller = loader.getController(); 现在,控制器不为空 然而,在我这样做之后 FXMLLoader loader

每次我忘记这个把戏的时候,我都会遇到几次非常奇怪的行为

FXMLLoader loader = new FXMLLoader();
loader.setLocation(getClass().getResource("view/window.fxml"));
Parent root = loader.load();
GuiController controller = loader.getController();
现在,
控制器
不为空

然而,在我这样做之后

FXMLLoader loader = new FXMLLoader();
loader.setLocation(getClass().getResource("view/window.fxml"));
Parent root = loader.load(getClass().getResource("view/window.fxml"));
GuiController controller = loader.getController();
控制器现在为
null

我知道
加载器
不知何故失去了对位置的控制?如果有人告诉我这是一种预期的行为,并向我解释原因,我将不胜感激


请注意,在关于这个问题的帖子发布后,我仔细查看了一下,没有发现任何问题,并且在实验2小时后才发现了解决方案,所以请不要用类似的问题来联系我。

FXMLLoader
方法是一种
静态方法。因此,您的第二个代码块相当于(编译为)

换句话说,您永远不会在
loader
上调用
load(…)
:因此
loader
永远不会解析FXML,也永远不会实例化控制器


在第一个代码块中,调用no arg方法,这是一个实例方法。

在对
setLocation(…)
的两个调用中,您可能是指
loader
,而不是
fxmloader
。您没有注意到文档中的
static
关键字。非常感谢。:)为此我损失了很多晚上。由于某种原因,我在这节课上的警告被取消了。。。在把它们重新打开后,它的表现就像你说的那样。谢谢。如果您从引用调用静态方法,大多数IDE都会给您一个警告。
FXMLLoader loader = new FXMLLoader();
// I assume you mean loader, not fxmlLoader, in the next line:
loader.setLocation(getClass().getResource("view/window.fxml"));
Parent root = FXMLLoader.load(getClass().getResource("view/window.fxml"));
GuiController controller = loader.getController();