1

プロジェクトのJARファイルを実行した後、NoClassDefFoundErrorが発生します。java -jar myproject.jarEclipseを使用したデバッグは正常に機能しますが、 JDK 1.7をインストールしてから、windowsコマンドを使用するたびにこのエラーが発生します。

Java1.6を使用して正常に動作していました。

エラーログは次のとおりです。

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/log4j/Layout
at program.Main.main(Main.java:20)
Caused by: java.lang.ClassNotFoundException: org.apache.log4j.Layout
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 1 more

私はそれについてグーグルで検索しましたが、正しい解決策を見つけることができませんでした。

私がすでに行ったこと:-Java 1.7をアンインストールし、代わりに1.6をインストールします-クラスパスを確認します-他のコンピューターで試してください(Java 1.7をアンインストールした後)-log4jライブラリへの1つの参照で空のプロジェクトを作成します=>同じ問題

そして、これがクラスパスファイルです:

<?xml version="1.0" encoding="UTF-8"?>
<classpath> 
<classpathentry kind="src" path="src"/> 
<classpathentry kind="con"path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
<classpathentry kind="lib" path="lib/RXTXcomm.jar"/> 
<classpathentry kind="lib" path="lib/log4j-1.2.15.jar"/> 
<classpathentry kind="output" path="bin"/> 
</classpath>

他に何をすべきか分かりますか?

ありがとう、

ニルス

編集:プロジェクトを単純な「JAR」ではなく「実行可能なJAR」としてエクスポートすると、プログラムは起動しますが、使用している別のライブラリ(RxtxComm)を使用できません。これが私が得るログです:

java.lang.UnsatisfiedLinkError: no rxtxSerial in java.library.path thrown while loading gnu.io.RXTXCommDriver

EDIT2:rxtxSerial.dllをWindows / system32フォルダーに置くことで、最後の問題を最終的に解決しました。しかし、それでも、プロジェクトをJARファイルとしてエクスポートした場合に機能しなくなった理由と、今すぐdllファイルを使用する必要がある理由がわかりません。

4

2 に答える 2

2

jarファイルを実行するときにlog4jのjarがクラスパスにあることを確認しますか?次のいずれかを確認してください。

  • log4jのjarが配置されているフォルダなどを含むCLASSPATHシステム変数があります。

  • jarを起動するときに、そのlog4jjarフォルダーを引数として渡します

    java -jar yourJar.jar -classpath c:\ myLog4JJarFolder

アップデート:

Andrew Thompsonのコメントによると、-jar引数を使用すると、-classpath引数が役に立たなくなります(無視されます)。コマンドラインでクラスパスを指定できるようにするには、メインクラスの完全修飾名も起動引数として使用する必要があります。

java -classpath "c:\dir1;c:\dir2" package.subPackage.MainClass
于 2012-09-11T13:43:40.550 に答える
0

上記に加えて、私がチェックするいくつかのこと:

  • すべてのリソースが実行可能 JAR にパッケージ化されていることを確認してください。jar を抽出し、確認のために見てください。

  • jar をクラスパスに追加します。

    java -cp [ここにjar] main.java

于 2012-09-11T13:52:29.923 に答える