0

実行時に発生し続けるエラーは次のとおりです。

[java] Exception in thread "main" java.lang.NoClassDefFoundError: org/lwjgl/LWJGLException

これは実行時エラーであり、コンパイル時エラーではないことに注意してください。私の build.xml の両方のタスクには同一のクラスパス セットがあり、コンパイル タスクは毎回正常に実行されます。

<path id="classpath">
    <fileset dir="lib" includes="*.jar" />
</path>

<target name="compile">
    <mkdir dir="build/classes"/>
    <javac
        srcdir="src"
        classpathref="classpath"
        includeantruntime="false"
        destdir="build/classes"
    />
</target>
...
<target name="run" depends="clean,compile,jar">
    <java
        jar="build/jar/${project.name}.jar"
        fork="true"
        classpathref="classpath"
        >
        <sysproperty key="java.library.path" path="${path.lib}/windows"/>
    </java>
</target>

コマンドラインから手動で jar を実行しようとすると、同じ結果が得られます。

java -cp .:lib/*.jar -Djava.library.path=lib/windows -jar build/jar/JUtopia.jar
Exception in thread "main" java.lang.NoClassDefFoundError: org/lwjgl/LWJGLException

ライブラリ jarfile は問題ないことに注意してください。

bash-3.1$ jar -tf lib/lwjgl.jar | grep LWJGLException
org/lwjgl/LWJGLException.class

そして、ネイティブ ライブラリが配置されます。

bash-3.1$ ls lib/windows/lwjgl.dll
lib/windows/lwjgl.dll

質問: ブレイズはどこで間違ったのでしょうか? 私はこの問題に3日近く悩まされてきました。どんな助けでも大歓迎です。

完全な結果スタック:

clean:
   [delete] Deleting directory C:\Users\mkumpan\Projects\JUtopia\build

compile:
    [mkdir] Created dir: C:\Users\mkumpan\Projects\JUtopia\build\classes
    [javac] Compiling 12 source files to C:\Users\mkumpan\Projects\JUtopia\build\classes

jar:
    [mkdir] Created dir: C:\Users\mkumpan\Projects\JUtopia\build\jar
      [jar] Building jar: C:\Users\mkumpan\Projects\JUtopia\build\jar\JUtopia.jar

run:
     [java] Exception in thread "main" java.lang.NoClassDefFoundError: org/lwjgl/LWJGLException
     [java]     at JUtopia.<init>(Unknown Source)
     [java]     at JUtopia.main(Unknown Source)
     [java] Caused by: java.lang.ClassNotFoundException: org.lwjgl.LWJGLException
     [java]     at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
     [java]     at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
     [java]     at java.security.AccessController.doPrivileged(Native Method)
     [java]     at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
     [java]     at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
     [java]     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
     [java]     at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
     [java]     ... 2 more

PS: 注、コマンドライン作業のために Windows 環境で Console2 と bash を使用しているため、Windows ネイティブでありながら Linux シェル構文を使用しています。バニラ cmd を使用して jar を実行すると、同じ結果が得られます。

4

2 に答える 2

1

-jar...

When you use this option, the JAR file is the source of all user classes, and other user class path settings are ignored.-参照

JARにクラスパスを設定してみてください

-Jarまたは、コマンドラインでメインクラスを指定して、オプションなしで実行してみてください

于 2013-10-01T11:13:20.593 に答える
0

考えられる原因の 1 つは、クラス LWJGLException のロード中に、クラスパスで見つからない別のクラスも参照していることです。したがって、報告されたエラーが明確でない場合があります。

ここで重要なのは、この NoClassDefFoundError があり、 ClassNotFoundException ではないことです。これは、発生していると想定するエラーです。クラス LWHLException が見つかりません。はい、できます! しかし、それはそれをロードすることはできません....

于 2013-10-01T10:56:32.657 に答える