FXML をインスタンス化してロードする典型的な定型コードに対処する方法はありますか?
典型的なバージョン:
public void start(Stage primaryStage)
{
URL fxmlUrl = this.getClass().getResource( /* your string path*/ );
FXMLLoader loader = new FXMLLoader(fxmlUrl);
try
{
primaryStage = loader.load();
this.controller = loader.getController();
}
catch(IOException ioe)
{
ioe.printStackTrace();
}
primaryStage.show();
}
上記のコードについては、バッキング FXML ファイルが<Stage></Stage>
ルートになっていることに注意してください。これは私の好みです。FXML ルートまでの読み込みと照合は、それに応じて調整できます。いずれにせよ、FXML ファイルの読み込みとコントローラーへの参照の取得は、(ほとんどの場合) 重要な部分です。
この定型コードを防ぐために、以下のようなユーティリティ メソッドを作成しようとしました。
<R, C> void loadFXML(R root, C controller, String path)
{
URL fxmlUrl = this.getClass().getResource( path );
FXMLLoader loader = new FXMLLoader(fxmlUrl);
try
{
root = loader.load();
controller = loader.getController();
}
catch(IOException ioe)
{
ioe.printStackTrace();
}
}
ただし、ある段階で null ポインター エラーが発生したか、読み込みが正しくありませんでした。ジェネリックやキャスティングと関係があると思います。
このコードはどのように改善できますか? あるいは、この問題を解決するために別の型コードを提案することはできますか?