ウェブカメラを使用する JavaFX アプリケーションを開発しています。カメラにアクセスできるようにするために、opencv ライブラリと、ネイティブの opencv 共有ライブラリを使用する javacv を使用する必要がありました。Javaがそれらを使用できるように、ネイティブdllをユーザーマシンに何らかの方法でインストールする必要があります。javafx の Ant タスク リファレンス全体を読み、ネイティブ システム ライブラリをアプリケーション パッケージに追加して機能させる方法を説明する例を見つけました。私はnetbeansを使用してjavafxアプリケーションパッケージを構築しています。これは、netbeans がアプリをビルドするために使用する build.xml ファイルをカスタマイズする方法です。
<import file="nbproject/build-impl.xml"/>
<target name="-post-jfx-jar" depends="-check-jfx-sdk-version">
<echo message="Embedding native libraries..."/>
<fx:jar destfile="${basedir}/build/native-libs-win-x86.jar">
<fx:fileset dir="${basedir}/natives/windows/x86" includes="*"/>
</fx:jar>
<fx:jar destfile="${basedir}/build/native-libs-win-x64.jar">
<fx:fileset dir="${basedir}/natives/windows/x64" includes="*"/>
</fx:jar>
<echo message="Natives embedded..."/>
</target>
<target name="-post-jfx-deploy" depends="-post-jfx-jar">
<echo message="deploying ..."/>
<fx:deploy width="600" height="400"
outdir="${basedir}/${bundle.outdir}"
outfile="AppName">
<fx:info title="AppName"/>
<fx:application name="${bundle.name}"
mainClass="pl.company.project.EntryClass"/>
<fx:permissions elevated="true"/>
<fx:resources>
<fx:fileset dir="dist" includes="*.jar"/>
<fx:fileset dir="dist/lib" includes="*.jar"/>
<fx:fileset dir="build" type="native"
os="windows" arch="x86"
includes="native-libs-win-x86.jar"/>
<fx:fileset dir="build" type="native"
os="windows" arch="x64"
includes="native-libs-win-x64.jar"/>
</fx:resources>
</fx:deploy>
</target>
これで、netbeans で clean と build を実行すると、プロジェクトの依存関係の jar、1 つの jnlp、html、実行可能 jar、および dll ライブラリが埋め込まれた 2 つの jar である一連の jar を含むフォルダーが取得されます。1 つの jar は native-libs-win-x64.jar で、2 つ目は native-libs-win-x86.jar です。ネイティブ ライブラリはトップ レベルにあるため、各 jar には dll と META-INF フォルダーのセットがあり、以下を含むマニフェストがあります: Manifest-Version: 1.0、Created-By: JavaFX Packager、Main-Class: null
Jnlp ファイルには、次のエントリも含まれています。
<resources os="windows" arch="x86"> <nativelib href="native-libs-win-x86.jar"/></resources>
と
jnlp を開始すると、ネイティブ ライブラリが読み込まれず、UnsatisfiedLinkError が発生します。しかし、実行可能なjar、依存関係、およびjnlpがあるフォルダーにdllを含むjarを解凍すると、すべてが魅力的に機能します。だから私の質問は..何が欠けているのですか? JavaFX ドキュメント ページの ant タスク ガイドに示されているように、すべてを実行しました。