2016-11-20 74 views
1

我有一個類FontInfo,我嘗試將其對象myFont發送到舞臺的新控制器,當我點擊按鈕時出現。這是我的主控制器類:發送類對象到舞臺控制器 - javafx

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(); 
    } 

} 

}

我需要用我在MainConroller在ChooseFontController類創建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) 

在:chooseFontController.setMyFont(myFont);

任何人都可以幫助我解決這個問題嗎?

+0

這似乎是FXMLLoader找不到一個控制器,因此返回從'loader.getController空() '。也許調用'loader.load()'有助於找到它;)。 (在這些情況下,調試有助於找到確切的問題) – n247s

回答

1

看來FXMLLoader找不到控制器,因此從loader.getController()返回null。也許撥打loader.load()有助於找到它...例如

FXMLLoader loader = new FXMLLoader(this.getClass().getResource("../fxml/ChooseFont.fxml")); 
    Loader.load(); 
    ChooseFontController chooseFontController = loader.getController(); 
    chooseFontController.setMyFont(myFont); 

(詩篇調試有很大幫助,在這些情況下找到確切問題)

1

修改initialize method

@FXML 
public void initialize() 
{ 
    //create new myFont 
    myFont = new FontInfo(); 
} 

其實這個問題是這樣,你必須編輯你的代碼加載FXML文件,你從來沒有加載ChooseFont.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"));