2016-11-20 4 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(); 
    } 

} 

}

私はChooseFontControllerクラスにMainConrollerで作成myFontオブジェクトを使用する必要があります。

public class ChooseFontController { 

//myFont object 
private FontInfo myFont; 

//setter myFont 
public void setMyFont(FontInfo myFont) { 
    this.myFont = myFont; 
} 

をしかし、私は、nullポインタ例外エラーが出ます:

Caused by: java.lang.NullPointerException 
at controllers.MainController.actionBtnChooseFont(MainController.java:48) 

chooseFontController.setMyFont(myFont);

誰でもこの問題を解決できますか?

+0

それはFXMLLoaderがコントローラを見つけることができなかったように思えるので、 'loader.getController(からnullを返します) '。たぶん 'loader.load() 'を呼び出すことでそれを見つけるのに役立つでしょう;)。 (Ps。Debuggingは、これらのケースでは正確な問題を見つけるのに大いに役立ちます) – 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(); 

ここでも静的なコンストラクタを使用しています。

関連する問題