我有一个类FontInfo,我尝试将其对象myFont发送到舞台的新控制器,当我点击按钮时出现。这是我的主控制器类:
public class MainController {
//create instance of font
private FontInfo myFont;
@FXML
private Button btnChooseFont;
public void initialize()
{
//create new myFont
myFont = new FontInfo();
}
@FXML
void actionBtnChooseFont(ActionEvent event) {
try
{
//resource to new parent root
Parent root = FXMLLoader.load(getClass().getResource("../fxml/ChooseFont.fxml"));
Stage stage = new Stage();
stage.setTitle("Choose font");
stage.setScene(new Scene(root, 300, 290));
stage.show();
FXMLLoader loader = new FXMLLoader(this.getClass().getResource("../fxml/ChooseFont.fxml"));
ChooseFontController chooseFontController = loader.getController();
chooseFontController.setMyFont(myFont);
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
我需要使用我在ChooseFontController类的MainConroller中创建的myFont对象:
public class ChooseFontController {
//myFont object
private FontInfo myFont;
//setter myFont
public void setMyFont(FontInfo myFont) {
this.myFont = myFont;
}
但我得到空指针异常错误:
Caused by: java.lang.NullPointerException
at controllers.MainController.actionBtnChooseFont(MainController.java:48)
in:chooseFontController.setMyFont(myFont);
任何人都可以帮我解决这个问题吗?
答案 0 :(得分:1)
修改initialize method
:
@FXML
public void initialize()
{
//create new myFont
myFont = new FontInfo();
}
实际上问题是您从不加载ChooseFont.fxml
文档,因此您必须编辑代码才能加载fxml文档:
FXMLLoader loader = new FXMLLoader(this.getClass().getResource("../fxml/ChooseFont.fxml"));
try{
loader.load();
}catch(Exception ex){
ex.printStackTrace();
}
ChooseFontController chooseFontController = loader.getController();
另请注意,这里使用的是静态构造函数
Parent root = FXMLLoader.load(getClass().getResource("../fxml/ChooseFont.fxml"));
答案 1 :(得分:1)
似乎FXMLLoader无法找到Controller,因此从loader.getController()
返回null。也许打电话loader.load()
有助于找到它......例如。
FXMLLoader loader = new FXMLLoader(this.getClass().getResource("../fxml/ChooseFont.fxml"));
Loader.load();
ChooseFontController chooseFontController = loader.getController();
chooseFontController.setMyFont(myFont);
(Ps。调试在这些情况下帮助找到确切的问题)