背景: JFXPanel を使用して Swing フレームに埋め込まれた JavaFX アプリケーションを作成しました。IDEとしてEclipseを使用しています。JFXPanel
「メインアプリケーション」は、インスタンス化されたときに .fxml ファイルをロードするために拡張されるクラスのインスタンスを作成するためだけに機能する別のクラスです。Eclipse からメイン クラスを実行すると、すべて問題なく、.fxml ファイルで指定された fx:controller のinitialize()
メソッドが呼び出され (ロード時に UI に加えられた変更からわかります)、問題はありません。
ただし、すべてを JAR にパッケージ化し、JFXPanel 拡張クラスを SwingJFrame
インスタンスに追加しようとすると、画像やスタイル シートなどを細かく読み取るだけで .fxml ファイルが読み込まれ、残りのコードは次のように機能します。期待されますが、fx:controller
のinitialize()
メソッドは呼び出されません。jar の内外の他のクラスからクラスにアクセスするのに問題はありません。また、Controller のインスタンスを返す ControllerFactory を設定しようとしただけでなく、FXMLLoader
のクラスローダーを設定して両方を使用するあらゆる種類の組み合わせを試しました。呼び出しの静的および非静的メソッドload()
. 結果は常に同じです。IDE から起動すると機能しますが、パッケージ化された jar から起動すると機能しません。私が言ったように、Javaコードからクラスを見つけるのに問題はなく、バンドルされたfxml/cssファイルはコントローラーの問題を除いて正常にロードされているように見えるので、jarにファイルが欠落していないことはわかっています。
FXMLLoader
これまでにこれに遭遇したことのある人はいますか、またはコントローラーの設定に失敗した場合に何が起こっているのか考えていますか? これは何らかのバグでしょうか?