0

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 ポインター エラーが発生したか、読み込みが正しくありませんでした。ジェネリックやキャスティングと関係があると思います。

このコードはどのように改善できますか? あるいは、この問題を解決するために別の型コードを提案することはできますか?

4

1 に答える 1