4

com.toptur.sysTray というパッケージに含まれるクラスがあります。システム トレイをロードするだけで、外部パッケージは使用しません。システム トレイをインストールする SysTray オブジェクトを作成します。すべてがうまく構築されます。コマンドラインからアプリケーションを実行でき、systray がインストールされます。しかし、クラス ファイルから jar を作成して実行しようとすると、NoClassDefFoundError が発生します。

パッケージとそのクラス ファイルは jar 内にあり、アプリケーションは ant 外部 jar を使用しません。Javaが提供するクラスだけです。

また、jar から .exe ファイルをビルドすると、エラーなしで再び動作し始めます。

どうすればこれを追跡できますか?

  <target name="jar" depends="">
  <jar destfile="build/toptur.jar" > 
    <manifest>
      <attribute name="Built-By" value="Toptur"/>
      <attribute name="Main-Class" value="gotacan"/>
    </manifest>
    <fileset dir="build">
       <include name="**/*.class"/>
    <include name="**/*.png"/>
<exclude name="**/*.jar"/>
  </fileset>
</jar>

上記のコードを使用して、ant ターゲットから jar ファイルを作成します。ドライバープログラムはパッケージに含まれていません。gotacan.java にあります

java -jar toptur.jar を使用して実行します

プログラムの残りの部分は機能し、そのパッケージを使用しようとすると例外がスローされるだけです。

4

4 に答える 4

0

おそらく、ビルドと.exeのビルドに使用するJVMに対してプログラムを実行するJREに依存します。

SysTray 機能は非常に新しい (Java6) ため、実行時にシステム パスに古い JRE または JVM がある場合

java -jar toptur.jar

作成したクラスは見つかりますが、JRE から使用するクラスは見つかりません。

于 2009-06-06T19:03:14.453 に答える
0

オープン ソース プロジェクトで ant を使用して jar を作成しようとしたときに、同様の問題が発生しました。

著者と連絡を取ったところ、代わりに Eclipse を使用して jar をエクスポートしました。彼らが提案したことを真似たところ、jar ファイルのサイズに明らかな違いがあることがわかりました。私は、一方が機能し、他方が機能しない原因となっている違いを特定するのに時間を費やしませんでした。ただし、同様のプロセスを使用して、適切に機能させることができる場合があります。もしそうなら、おそらくあなたは違いを見て、結果を私たちと共有することができます:)

以下は私の問題と解決策へのリンクです: Xerces-for-Android NoClassDefFoundError When Using Jar instead of Source Code

于 2013-09-19T15:43:22.650 に答える