1

背景: JFXPanel を使用して Swing フレームに埋め込まれた JavaFX アプリケーションを作成しました。IDEとしてEclipseを使用しています。JFXPanel「メインアプリケーション」は、インスタンス化されたときに .fxml ファイルをロードするために拡張されるクラスのインスタンスを作成するためだけに機能する別のクラスです。Eclipse からメイン クラスを実行すると、すべて問題なく、.fxml ファイルで指定された fx:controller のinitialize()メソッドが呼び出され (ロード時に UI に加えられた変更からわかります)、問題はありません。

ただし、すべてを JAR にパッケージ化し、JFXPanel 拡張クラスを SwingJFrameインスタンスに追加しようとすると、画像やスタイル シートなどを細かく読み取るだけで .fxml ファイルが読み込まれ、残りのコードは次のように機能します。期待されますが、fx:controllerinitialize()メソッドは呼び出されません。jar の内外の他のクラスからクラスにアクセスするのに問題はありません。また、Controller のインスタンスを返す ControllerFactory を設定しようとしただけでなく、FXMLLoaderのクラスローダーを設定して両方を使用するあらゆる種類の組み合わせを試しました。呼び出しの静的および非静的メソッドload(). 結果は常に同じです。IDE から起動すると機能しますが、パッケージ化された jar から起動すると機能しません。私が言ったように、Javaコードからクラスを見つけるのに問題はなく、バンドルされたfxml/cssファイルはコントローラーの問題を除いて正常にロードされているように見えるので、jarにファイルが欠落していないことはわかっています。

FXMLLoaderこれまでにこれに遭遇したことのある人はいますか、またはコントローラーの設定に失敗した場合に何が起こっているのか考えていますか? これは何らかのバグでしょうか?

4

3 に答える 3

1

JavaFX ソフトウェアを .jar ファイルにパッケージ化するときに、同様の問題が発生しました。相対パスに関する問題であることが判明しました。IDE にはこれに関する問題はありませんが、jar 内でコンパイルすると問題が発生します。

これは、次のコードを使用して .fxml ファイルを呼び出すことで解決されました。

getClass().getClassloader().getResource("/my/view/selector.fxml")

これがあなたのバグの「理由」であると言うには、よくわかりませんが、これは確かにしばらくの間私を困惑させ、私が抱えていた問題のほとんどのようです.

元の質問: JavaFXで1つのウィンドウに限定された実行可能Jar

于 2013-02-15T21:22:07.277 に答える