8

私は一日中、javafx アプリケーションを jar ファイルに変換しようと試みてきました。Java 1.7 update 7 を使用しています。

オラクルにはいくつかの情報がありますが、あちこちに散らばっているようです。Intellij はほとんど仕事をしていますが、次のエラーが発生します。

java.lang.NoClassDefFoundError: javafx/application/Application

java に jfxrt.jar の場所を伝える必要があるようです... この jar を intellij のマニフェスト ビルドのクラスパス情報に追加すると、ctrl+shift+alt+s -> Artifacts -> Output Layout タブ-> クラス パスを指定すると、別のエラーが発生します。

 Could not find or load main class com.downloadpinterest.code.Main

クラスパスに jfxrt.jar を含める必要があるのは奇妙に思えますが...

ant スクリプトも作成しようとしましたが、IntelliJ は 90% の方法であると感じています。なぜ jfxrt.jar を含める必要があるのか​​ 、そしてなぜ Main クラスを含める必要があるのか​​ を理解するために少し助けが必要ですが見つかりません(どうにかしてクラスパスに追加する必要があると思いますか?)。

何が起こっているのか、誰かが私に手がかりを与えることができますか? 以前は基本的な GUI があり、うまく機能していましたが、JavaFX は生活を複雑にしているようです。

4

2 に答える 2

4

あなたの仮定は正しいです。JavaFX をクラスパスに追加する必要があります。
にあります[JDK]/jre/lib/jfxrt.jar

実行時に JavaFX を提供するには、このOracle ガイドに示されているように、JavaFX をアプリケーションにバンドルする [JAVA_HOME]/lib/jfxrt.jar、Java 7 Update 6 をアプリケーションの要件にしてから、アプリケーションの都合のよいときにクラスパスに 追加します。

最初のオプションは、より多くの作業を意味しますが、すべてのユーザーが同じバージョンのライブラリを持っていることを絶対に確認します。また、JRE をバンドルすることもできます。2 番目のバージョンでは、この確実性は提供されませんが、より簡単に実現できます。

2 番目のオプションの変形として - JRE をバンドルすることが実際に可能である場合 - ディストリビューションにバンドルしてから、シェルスクリプト/バッチファイル/実行可能ラッパーをプログラムに使用させることもできます。そうすれば、オプション II からの難易度がわずかに上がるだけで、オプション I からすべての確実性が得られます。

于 2012-09-03T09:40:19.073 に答える