2

Netbeans 7 を使用して JavaFx 2.0 アプリケーションを開発しています。メイン アプリケーションは、「ライブラリ」フォルダを右クリックし、「プロジェクトの追加...」を選択して追加した別のクラス ライブラリ プロジェクトを参照しています。netbeans からアプリケーションを実行すると正常に動作します。

「クリーンアンドビルド」でjarファイルにデプロイし、コンソール経由で実行しようとすると

java -jar TestApp.jar

私は得る

Exception in thread "JavaFX-Launcher" java.lang.NoClassDefFoundError: net/pmoule/SomeClass
...

私のアプリケーションの dist/lib フォルダには、参照されたライブラリが含まれています。だから私見はすべてうまくいくはずです。アプリケーション jar に含まれる Manifest.MF を見ると、これが得られます

Manifest-Version: 1.0
Ant-Version: Apache Ant 1.8.2
Created-By: 1.6.0_23-b05 (Sun Microsystems Inc.)
Implementation-Vendor: pmoule
Implementation-Title: TestApp
Implementation-Version: 1.0
Main-Class: com/javafx/main/Main
JavaFX-Application-Class: testapp.TestApp
JavaFX-Version: 2.0

私のクラスパスはどこですか? Netbeans に正しいクラスパスを追加させるにはどうすればよいですか?

jarに含まれているものを編集して、Manifest.MFに手動で追加しようとしました

Manifest-Version: 1.0
Ant-Version: Apache Ant 1.8.2
Created-By: 1.6.0_23-b05 (Sun Microsystems Inc.)
Implementation-Vendor: pmoule
Implementation-Title: TestApp
Implementation-Version: 1.0
Class-Path: lib/MyLib.jar        //THIS IS NEW
Main-Class: com/javafx/main/Main
JavaFX-Application-Class: testapp.TestApp
JavaFX-Version: 2.0

成功せず、同じエラー。

JavaFX 2.0 SDK で提供されるすべてのサンプルは、WindowsExplorer でダブルクリックするか、コンソールから次のように入力して動作します。

java -jar PathAnimation.jar

ただし、これらの例のいずれも、外部 jar を参照していません。

Netbeans JavaFX 2.0 アプリケーション しかし、これまでのところ解決策はありません。

助けてくれてありがとう!

4

3 に答える 3

3

自分で実用的な解決策を見つけました。

dist/lin フォルダ内のすべての外部ライブラリのサイズは 0kb でした。もちろん、例外は正しかった。

アプリケーションを実行するために、プロジェクトの jfx-impl.xml で次のことを行いました。

クラスパスを manifest.mf に追加します

<fxjar destfile="${jfx.deployment.dir}/${jfx.deployment.jar}" applicationClass="${main.class}" >
             <fileset dir="${build.classes.dir}"/>
              <manifest>
               <attribute name="Implementation-Vendor" value="${application.vendor}"/>
               <attribute name="Implementation-Title" value="${application.title}"/>
<!-- NEW -->   <attribute name="Class-Path" value="${jar.classpath}"/> <!-- NEW -->
               <attribute name="Implementation-Version" value="1.0"/>
              </manifest>
    </fxjar>

Web デプロイ用の出力ディレクトリを作成する

<property name="jfx.deployment.web.dir" location="${jfx.deployment.dir}/web" />
<mkdir dir="${jfx.deployment.web.dir}" />

fxdeploy タスクの出力ディレクトリを設定する

<fxdeploy width="${jfx.applet.width}" height="${jfx.applet.height}"
              outdir="${jfx.deployment.web.dir}" <!-- NEW DIR -->
              embedJNLP="true"
              outfile="${application.title}">
        <info title="${application.title}"
              vendor="${application.vendor}"/>
        <application name="${application.title}"
                     appclass="${main.class}"/>
        <resources type="eager">
           <fileset dir="${jfx.deployment.web.dir}"> <!-- NEW DIR -->
              <include name="${jfx.deployment.jar}"/>
              <include name="lib/*.jar"/>
              <exclude name="**/jfxrt.jar"/>
           </fileset>
        </resources>
</fxdeploy>

これで、デスクトップ アプリケーションをデプロイし、Windows エクスプローラーからダブルクリックするか、次のように入力して ist を実行できます。

java -jar TestApp.jar

新しく作成した web-dir のコンテンツにはまだ問題があります。

  1. TestApp.jar はコピーされません zo dist/web
  2. 参照された外部 jar は dist/web にコピーされません

これは私にとっては問題なく、しばらくして修正されます。

これが他の誰かに役立つことを願っています。

于 2011-07-24T12:30:26.767 に答える
0

クラスパスの依存関係を fx:jar タスクに伝える必要があります。

<fxjar destfile="${jfx.deployment.dir}/${jfx.deployment.jar}" applicationClass="${main.class}" >
      <fileset dir="${build.classes.dir}"/>
      <manifest>
        <attribute name="Implementation-Vendor" value="${application.vendor}"/>
        <attribute name="Implementation-Title" value="${application.title}"/>
        <attribute name="Implementation-Version" value="1.0"/>
      </manifest>

      <!-- Setup the classpath for the generated .jar here -->
      <fx:resources>
        <fx:fileset type="jar" dir="lib" includes="MyLib.jar"/>
      </fx:resources>
</fxjar>

リソースだけでなく、fx:deploy タスクで fx:resources タグも使用する必要があります。これにより、回答に残っている最後の 2 つの問題が解決されるはずです。

于 2013-06-10T22:03:42.577 に答える
0

Netbeans の project => properties => Build => Packaging で、"Copy Dependent Libraries" にチェックを入れましたか?

于 2011-07-21T00:00:09.647 に答える