5

初めて javafx を試してみたいと思います。Oracle javafx サイトにアクセスして、JDK 7u25 に javafx が付属していることを確認しました。Java のバージョンを更新しましたが、何を探しているのかわかりません。javafx クラスをインポートして使用しようとすると、「シンボルが見つかりません」というエラーが表示されます。%JAVA_HOME%/lib で「javafx-mx.jar」「javafx-doclet.jar」「ant-javafx.jar」ファイルを見つけましたが、私が理解している限り、これらは JDK ではなく JRE で使用されることを意図しています。私は、Eclipse プラグインに依存したくありません。ビルド プロセスには maven を使用します。いくつかの javafx maven プラグインを見てきましたが、それらは javafx ツールをターゲットにしているようです。間違った画像を取得していますか?これらのクラスを正しくインポートするにはどうすればよいですか?

編集

ここで見つけたものを使用してプロジェクトをコンパイルできるようになりました。追加することをお勧めします:

<dependency>
  <groupId>com.oracle</groupId>
  <artifactId>javafx</artifactId>
  <version>2.2</version>
  <scope>system</scope>
  <systemPath>${java.home}/lib/jfxrt.jar</systemPath>
</dependency>

これでビルドの問題は解決しましたが、プログラムを実行できません。この単純なを実行しようとしていますが、次のエラーが発生します。

java.lang.NoClassDefFoundError: javafx/application/Application
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:792)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at org.codehaus.mojo.exec.ExecJavaMojo$1.run(ExecJavaMojo.java:285)
    at java.lang.Thread.run(Thread.java:724)
Caused by: java.lang.ClassNotFoundException: javafx.application.Application
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)

同じライブラリをランタイムに追加する方法についてのアイデアはありますか? 私はmaven-exec-pluginを使用しています。

4

1 に答える 1

4

jfxrt.jar を Maven システムの依存関係にすることはお勧めしません

jfxrt.jar へのシステム依存関係を介して Maven を JavaFX ビルドと統合することは良い考えではないと思います。

そのメソッドを使用すると、アプリケーションを構築できます (javafx ランタイム クラスのシステム依存関係により、maven がそれらを見つけることができるため)。

ただし、Java 7 でアプリケーションを実行する場合は、JavaFX 2.0 を使用してコードをコンパイルする (コマンド ラインを使用)と同様に、java.exe コマンドに手動でクラスパスを追加する必要があります。

私は maven exec プラグインを使用しませんが、この方法でツールを使用する場合は、その exec プラグインに適切なクラスパスを設定する手順を提供する maven exec:java classpath に jar を追加するを参照してください。

好ましいアプローチ

推奨されるアプローチは、推奨されるデプロイ ツール ( JavaFX ant tasksjavafxpackagerjavafx-maven-pluginまたはjavafx-gradle- plugin など) を使用してアプリケーションを適切にパッケージ化することです。

これらのツールは、アプリケーション jar に小さなラッパー メイン クラスを埋め込みます。JavaFX ランタイムが利用可能な場合はそれを見つけ、利用できない場合はランタイムのインストールをユーザーに案内します。

また、Oracle Java 8を使用する場合、 javafx はデフォルトのクラスパスにあるため、クラスパス関連の問題について心配する必要はありません。

于 2013-07-19T00:01:20.897 に答える