控制器中的JavaFX元素为null

控制器中的JavaFX元素为null,java,javafx,Java,Javafx,我有一个ImageView imageview1,我想在其中显示从resources文件夹加载的图像 但是当我运行程序时,我的imageview为空 我看到很多其他帖子说问题在于人们在FXML之后再次初始化ImageView时使用了imageview1=newImageView(),但我不会在任何地方初始化它。如果我尝试在start()中初始化它,然后尝试显示图像,程序运行正常,但我看不到图像 以下是我的控制器代码: package com.morialog.moriamines.GUIs; 进

我有一个
ImageView imageview1
,我想在其中显示从
resources
文件夹加载的图像 但是当我运行程序时,我的imageview为空

我看到很多其他帖子说问题在于人们在FXML之后再次初始化ImageView时使用了
imageview1=newImageView(),但我不会在任何地方初始化它。如果我尝试在start()中初始化它,然后尝试显示图像,程序运行正常,但我看不到图像

以下是我的控制器代码:

package com.morialog.moriamines.GUIs;
进口com.morialog.moramines.Partie.Item;
进口com.morialog.moramines.Utils;
导入javafx.application.application;
导入javafx.application.Platform;
导入javafx.scene.image.image;
导入javafx.scene.image.ImageView;
导入javafx.stage.stage;
公共类主菜单扩展应用程序{
公共静态阶段初级阶段;
公共图像视图图像视图1;
公共静态void start(){
发射();
}
@凌驾
公共无效开始(阶段primaryStage){
main menu.primaryStage=primaryStage;
show();
addImage(项目:铁剑);
primaryStage.show();
试一试{
添加(新图像(String.valueOf(Utils.getResource(“/logo.png”)));
}捕获(例外e){
System.out.println(“加载javaFX图标时出现异常”);
e、 printStackTrace();
}
}
公共静态void show(){
primaryStage.setTitle(“Moramines-主菜单”);
setScene(Utils.getSceneFromRessource(GUI.MAIN_菜单));
}
公共无效添加图像(项目){
试一试{
Image img=新图像(getClass().getResource(“/Textures/”+item.toString()+”.png)
).toString());
imageview1.setImage(img);
}捕获(例外a){
a、 printStackTrace();
}
}
}
Slaw解决方案解决了我的问题:
您将MainMenu用作fx:controller,然后请注意,您将得到两个不同的MainMenu实例。将应用程序类用作控制器类通常是个坏主意

Slaw的答案解决了我的问题:
您将MainMenu用作fx:controller,然后请注意,您将得到两个不同的MainMenu实例。将应用程序类用作控制器类通常是个坏主意

为什么它不能为null?问题中没有任何代码会导致它被初始化。我认为你混淆了你读过的其他文章。如果他们使用FXML来定义
ImageView
,那么您是正确的,它不应该由您在代码中初始化。但是,您的示例没有使用FXML,因此必须在代码中初始化对象。然后,实际上,你知道,把它添加到你的场景的某个地方如果您使用的是FXML(如果是,您应该回答您的问题以提供答案),并且您使用的是
main menu
作为
fx:controller
,请注意,您将得到两个不同的
main menu
实例。将应用程序类用作控制器类通常是个坏主意。很抱歉,我完全忘记了使用FXML文件加载所有内容,@Slaw answer修复了它,因为正如他所说,我也将应用程序类用作控制器。感谢大家,我将复制Slaw答案,并将其标记为解决方案,如果他不将其作为答案发布,请编辑您的问题以适合您的答案:)